大津阈值分割matlab实验,OTSU(大津法)分割源程序(MATLAB版)
接下來介紹OTSU方法的原理:
***************************************************************************************************************************************************************
OTSU法對于具有雙峰性質的灰度圖像或是彩色圖像的某一通道的分割效果很好,程序為了增加健壯性加了個可以根據實際情況確定的修正值th_set.
**************************************************************************************************************************************************************
function y1=OTSU(image,th_set)
�=imread('color1.bmp');
gray=rgb2gray(image);%原圖像的灰度圖
low_high=stretchlim(gray);%增強圖像,似乎也不是一定需要
gray=imadjust(gray,low_high,[]);
% subplot(224);imshow(gray);title('after adjust');
count=imhist(gray);
[r,t]=size(gray);
n=r*t;
l=256;
count=count/n;%各級灰度出現的概率
for i=2:l
if count(i)~=0
st=i-1;
break
end
end
%以上循環語句實現尋找出現概率不為0的最小灰度值
for i=l:-1:1
if count(i)~=0;
nd=i-1;
break
end
end
%實現找出出現概率不為0的最大灰度值
f=count(st+1:nd+1);
p=st;q=nd-st;%p和分別是灰度的起始和結束值
u=0;
for i=1:q;
u=u+f(i)*(p+i-1);
ua(i)=u;
end
%計算圖像的平均灰度值
for i=1:q;
w(i)=sum(f(1:i));
end
%計算出選擇不同k的時候,A區域的概率
d=(u*w-ua).^2./(w.*(1-w));%求出不同k值時類間方差
[y,tp]=max(d);%求出最大方差對應的灰度級
th=tp+p;
if th
th=tp+p;
else
th=th_set;?%根據具體情況適當修正門限
end
y1=zeros(r,t);
for i=1:r
for j=1:t
x1(i,j)=double(gray(i,j));
end
end
for i=1:r
for j=1:t
if (x1(i,j)>th)
y1(i,j)=x1(i,j);
else
y1(i,j)=0;
end
end
end
%上面一段代碼實現分割
% figure,imshow(y1);
% title('灰度門限分割的圖像');
接下來介紹OTSU方法的原理以及用C語言實現:
閾值將原圖像分成前景、背景兩個圖像。
前景:用n1,csum,m1來表示在當前閾值下的前景的點數,質量矩,平均灰度;
背景:用n2,sum-csum,m2來表示在當前閾值下的背景的點數,質量矩,平均灰度;
當取最佳閾值時,背景應該與前景差別最大,關鍵在于如何選擇衡量差別的標準;
而在otsu算法中這個衡量差別的標準就是最大類間方差;
在以下程序中類間方差用是sb表示,最大類間方差用fmax,關于最大類間方差(otsu)的性能:
類間方差對噪音和目標大小十分敏感,它僅對類間方差為單峰值的圖像產生較好的分割效果,
當目標與背景的大小比例懸殊時,類間方差準則函數可能呈現雙峰或多峰,此時效果不好,但是類間方差使用是最少的。
最大類間方差(otsu)的公式推導:
記t為前景與背景的分割閾值,前景點數占圖像比例為w0,平均灰度為u0;背景點數占圖像比例為w1,平均灰度為u1;
則圖像的總平均灰度為:u=w0*u0+w1*u1;
前景和背景圖像的方差:g=w0*(u0-u).^2+w1*(u1-u).^2
=w0*w1*(u0-u1).^2
此公式為方差公式。
上面的g公式也就是下面程序中得 sb的表達式:
當方差g最大時,可以認為此時前景與背景差異最大,也就是此時的灰度值是最佳閾值;
總結
以上是生活随笔為你收集整理的大津阈值分割matlab实验,OTSU(大津法)分割源程序(MATLAB版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 批处理停止php服务,通过批处理启动和停
- 下一篇: matlab pca可视化,利用Matl