otsu算法
1. 【高分】用Matlab实现中值滤波与Otsu算法
告诉你一个简单的方法
你可以edit
medfilt2
edit
graythresh
就可以得到原函数的详细编码,然后再稍微修改一下就行了呗
2. otsu算法的matlab程序,哪位能帮我注释一下,前面的我自己注释的,后面的有点看不懂。谢谢!
程序思路有点乱.。写成下面这样的,容易看! image_1=imread(
3. otsu阈值分割算法是什么
Otsu算法:最大类间方差法(大津算法),是一种确定阈值的算法。
之所以称为最大类间方差法是因为,用该阈值进行的图像固定阈值二值化,类间方差最大,它是按图像的灰度特性,将图像分成背景和前景两部分,使类间方差最大的分割意味着错分概率最小。
算法评价:
优点:算法简单,当目标与背景的面积相差不大时,能够有效地对图像进行分割。
缺点:当图像中的目标与背景的面积相差很大时,表现为直方图没有明显的双峰,或者两个峰的大小相差很大,分割效果不佳,或者目标与背景的灰度有较大的重叠时也不能准确的将目标与背景分开。
4. 求一个用otsu算法的图像分割matlab程序
image_1=imread('E:\ebook\lena.bmp'); %读入图片
image_1=rgb2gray(image_1);%灰度化
[m,n]=size(image_1);%计算图片的像素点个数,行列,n是列数,Gray
num=zeros(1,256);%存放各灰度级出现的次数
p=zeros(1,256);%存放各灰度级的比率
image_1=double(image_1);%双精度化
for i=1:m
for j=1:n
num(image_1(i,j)+1)=num(image_1(i,j)+1)+1;%统计各灰度级的像素点个数
end
end
for i=1:256
p(i)=num(i)/(m*n);%计算各灰度级出现的比率
end
for i=2:256
if p(i)~=0
st=i+1;%实现寻找出现比率不为0的最小灰度值
break
end
end
for i=256:-1:1
if p(i)~=0;
nd=i-1;%实现找出出现比率不为0的最大灰度值
break
end
end
%以下程序实现利用最小方差和法找出门阈值
w=inf; th=0;
for t=st:nd%最小非零比率灰度值到最大非零比率灰度值
qt1=0; qt2=0;%前景后景像素点比率
u1=0; u2=0;%前景后景均值
v1=0; v2=0;%
for i=1:t
qt1=qt1+p(i);
end
for i=1:t
u1=u1+i*p(i)/qt1;
end
for i=1:t
v1=v1+((i-u1)^2)*p(i)/qt1;
end
for i=t+1:256
qt2=qt2+p(i);
end
for i=t+1:256
u2=u2+i*p(i)/qt2;
end
for i=t+1:256
v2=v2+((i-u2)^2)*p(i)/qt2;
end
if qt1*v1+qt2*v2<w
th=t; w=qt1*v1+qt2*v2 ;
end
end
for i=1:m
for j=1:n
if (image_1(i,j)+1>th)
image_2(i,j)=255;
else
image_2(i,j)=0;
end
end
end
image_2=uint8(image_2);%读入读出变换
figure,imshow(image_2);%显示二值化后的图片
5. otsu法和threshold有什么区别
盲猜是图像二值化处理的问题。
首先说结论:otsu法和threshold并不是一类东西,没法说有什么区别。otsu法是得出threshold的一个算法。
一个灰度图像,每个像素的灰度值都是一个字节,8位,也就是0~255。数越大颜色越浅,越小颜色越深,0是黑色,255是白色。
二值化图像也就是只有黑和白两种颜色,一般情况下0是黑,1是白。
将灰度图进行二值化处理时也就需要一个阈值,也就是threshold。小于这个阈值的数为0,这个点为黑色;大于这个阈值的数为1,这个点为白色。
所以图像二值化最根本的问题就在于怎么去选择这个阈值。
最简单的办法就是设定一个固定值,这是运算速度最快也是最弱智的方法。显然这种方法对环境光的要求比较高,如果整体环境的明暗发生变化,那么对设定的阈值也要重新整定。
所以需要找到一种能够自动计算出阈值的算法。这种算法有很多,OTSU法是其中用的比较多的一个方法。
OTSU法,中文叫大津法,是由日本学者大津展之提出的,因此以他的名字命名。大津法的根本思想是,首先通过聚类的方法将图像的灰度值分为前景和背景两类,再穷举所有像素点的灰度值,并计算出一个阈值使得类间方差最大,这样这个阈值就是一个理想的二值化阈值。大津法能够很好的适应图像的明暗度和对比度的变化。
大津法的具体算法可以参考这篇文章:网页链接
6. 图像分割中的otsu算法 有原理介绍么我在网上搜的论文都是改进啊或者研究什么的 没有最基础的算法介绍
这个算法很简单,是个日本人70年代写的论文,你看看能不能搜到。具体的就是遍历灰度0-255,选择一个灰度值,使他们的类间距最大,图像中掺着一些模式识别的概念,我想看看ostu的公式就能懂了吧,没有这么复杂。
7. 最佳阀值分割 编程实现otsu最佳全局阀值算法
a=imread('YuChu.bmp');
如果读入的是彩色图,需要用a=rgb2gray(a);转换为灰度图
加了这句我运行了下,程序没出现错误也能出图
另外matlab图像处理工具箱中用level = graythresh(I)函数去阈值,其方法与你的方法一致,都是Otsu方法
补充:
你看看a读入时数据的大小,要是3维的话就是RGB图像了,需要转一下
另外是程序错误还是结果不对?
8. Otsu算法在Canny算子中的应用中,Otsu算法的程序后,要不要再添加在Canny算子的程序
问题一:
OTSU法是二值化图像的算法,经过OTSU处理图像就成了黑白二值图。
CANNY算法是针对灰度图的边缘提取算法。OTSU处理后,不需要再加CANNY处理了。
问题二:
如果图像噪音较大,就需要先做中值滤波,或其它降噪处理。这是图像处理的前处理。做前处理的目的是提高图像质量,然后再做OTSU,效果会好一些。但图像本身就很清晰的话,就不需要加中值滤波了。
通过你的问题,我感觉你还没有透彻理解几个术语的概念。
先想清楚想把什么样的图像处理成什么样的图像,然后根据目的选择处理方法。
如果话说重了,请原谅。
9. otsu算法有多个k值对应的类间方差相等且最大
k的0~255循环求得每一个对应的fc=w0*(u0-ut).^2+w1*(u1-ut).^2;然后比较这256个fc中的最大值,对应的那个k就是ostu的阈值。所以你这个还差一个k的循环,并在循环里面求最大fc。
我这也有段求阈值的,你可以参考下
hist=zeros(256,1);%直方图
%threshold=128; %初始阈值
%计算直方图
for i=1:height
for j=1:width
m=I_gray(i,j)+1;
hist(m)=hist(m)+1;
end
end
hist=hist/(height*width);%落在每一灰度级上的概率
avg=0;
for m=1:256
avg=avg+(m-1)*hist(m);
end
temp=0;
for i=1:256
p1=0;
avg1=0;
avg2=0;
T_current=i-1;%当前分割阈值
for m=1:T_current-1
p1=hist(m)+ p1;%低灰度级概率总和
end
p2=1-p1;%高灰度级概率总和
for m=1:256
if m<T_current
avg1=avg1+(m-1)*hist(m);
else
avg2=avg2+(m-1)*hist(m);
end
end
avg1=avg1/p1;
avg2=avg2/p2;
D=p1*(avg1-avg)^2+p2*(avg2-avg)^2;
if D>=temp
finalT=T_current;
temp=D;
end
end
另外,站长团上有产品团购,便宜有保证