Otsu最大类间方差法图像二值化MATLAB实现
2017-05-07 11:03
169 查看
OTSU算法是由日本学者OTSU于1979年提出的一种对图像进行二值化的高效算法,可根据算法提取平坦地区的建筑物。
参考文献地址
该方法将图像分为前景和背景两部分,背景和目标之间的类间方差越大,说明构成图像的两部分的差别越大,当部分目标错分为背景或部分背景错分为目标都会导致两部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。
最大类间方差法(otsu)的公式推导:
记t为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1。
则图像的总平均灰度为:u=w0*u0+w1*u1。
前景和背景图象的方差:g=w0*(u0-u)(u0-u)+w1(u1-u)(u1-u)=w0*w1(u0-u1)*(u0-u1),此公式为方差公式。
当方差g最大时,可以认为此时前景和背景差异最大,此时的灰度t是最佳阈值
sb = w0*w1*(u1-u0)*(u0-u1)
MATLAB实现:
调用:(注意图像为uint8格式)
输出参数:
Otsu_cell 标记分类的点,存储0 1逻辑值
Out_image 滤掉目标点(较高的一类)后的图像
th 分类的参考像素值
参考文献地址
该方法将图像分为前景和背景两部分,背景和目标之间的类间方差越大,说明构成图像的两部分的差别越大,当部分目标错分为背景或部分背景错分为目标都会导致两部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。
最大类间方差法(otsu)的公式推导:
记t为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1。
则图像的总平均灰度为:u=w0*u0+w1*u1。
前景和背景图象的方差:g=w0*(u0-u)(u0-u)+w1(u1-u)(u1-u)=w0*w1(u0-u1)*(u0-u1),此公式为方差公式。
当方差g最大时,可以认为此时前景和背景差异最大,此时的灰度t是最佳阈值
sb = w0*w1*(u1-u0)*(u0-u1)
MATLAB实现:
function [b,Out_image, th] = f_Otsu(a) [m,n] = size(a); N = m*n; L = 256; count = zeros(1, 256); %计数 f = zeros(1, 256); %概率 for i = 1:L count(i) = length(find(a==(i-1))); f(i) = count(i) / N; end for i=1:L if count(i)~=0 st=i; %起始点 break; end end for i=L:-1:1 if count(i)~=0 nd=i; %结束点 break; end end p=st; q=nd-st; u=0; ua = zeros(1, q + 1); w = zeros(1, q + 1); for i = 0 : q u = u + f(p + i) * (p + i); %像素的平均值 ua(i + 1) = u; %前i个像素的平均灰度值 end; for i = 0 : q w(i + 1) = sum(f(p : p + i)); %前i个像素的累加概率 end; w = w + 0.0001; d = (u * w - ua) .^ 2 ./ (w .* (1 - w)); [y, tp]=max(d); %取出数组的最大值及取最大值的点 th = tp + p - 1; b = zeros(m,n); Out_image = double(a); for i=1:m for j=1:n if a(i,j) > th b(i,j)=1; Out_image(i,j) = nan; else b(i,j)=0; end end end end
调用:(注意图像为uint8格式)
image_DSM = uint8(image_DSM); [Otsu_cell,Out_image,th] = f_Otsu(image_DSM);
输出参数:
Otsu_cell 标记分类的点,存储0 1逻辑值
Out_image 滤掉目标点(较高的一类)后的图像
th 分类的参考像素值
相关文章推荐
- Otsu(最大类间方差法)方法的C++实现
- 自动选择阈值--最大类间方差法(OTSU)原理及matlab实现
- 用最简单的代码实现大津算法(最大类间方差法otsu)
- 图像二值化----otsu(最大类间方差法、大津算法)(二)
- 最大类间方差法(大津法,OTSU)
- 图像二值化----otsu(最大类间方差法)
- 图像二值化方法--OTSU(最大类间方差法)
- 图像二值化----otsu(最大类间方差法、大津算法)
- [置顶] 我的CUDA学习之旅5——OTSU二值算法(最大类间方差法、大津法)CUDA实现
- 图像二值化----otsu(最大类间方差法、大津算法)
- 最大类间方差法(大津法,OTSU)
- OpenMV图像处理 最大类间方差法的实现
- 图像二值化----otsu(最大类间方差法、大津算法)
- 最大类间方差法(OTSU)
- 最大类间方差法(OTSU)求阈值
- 最大类间方差法OTSU,1979年前后景区分法
- 图像二值化----otsu(最大类间方差法、大津算法)(二)
- 最大类间方差法(OTSU)
- 最大类间方差法(OTSU)
- 二维最大类间方差(otsu)matlab实现源码