/****************************************以下部分内容为转载**********************************************/

/*****转自:http://hi.baidu.com/yibobin/blog/item/252573b76fba72f831add1a9.html******/

最大类间方差法是由日本学者大津于1979年提出的,是一种自适应的阈值确定的方法,又叫大津
法,简称OTSU。它是按图像的灰度特性,将图像分成背景和目标2部分。背景和目标之间的类间方差
越大,说明构成图像的2部分的差别越大,当部分目标错分为背景或部分背景错分为目标都会导致2部
分差别变小。因此,使类间方差最大的分割意味着错分概率最小。
对于图像I(x,y),前景(即目标)和背景的分割阈值记作T,属于前景的像素点数占整幅图像的比
例记为ω0,其平均灰度μ0;背景像素点数占整幅图像的比例为ω1,其平均灰度为μ1。图像的总平均
灰度记为μ,类间方差记为g。
假设图像的背景较暗,并且图像的大小为M×N,
图像中像素的灰度值小于阈值T的像素个数记作N0,像素灰度大于阈值T的像素个数记作N1,则有:
      ω0=N0/ M×N (1)
      ω1=N1/ M×N (2)
      N0+N1=M×N (3)
      ω0+ω1=1 (4)
      μ=ω0*μ0+ω1*μ1 (5)
      g=ω0(μ0-μ)^2+ω1(μ1-μ)^2 (6)
将式(5)代入式(6),得到等价公式: g=ω0ω1(μ0-μ1)^2 (7)
采用遍历的方法得到使类间方差最大的阈值T,即为所求。

Otsu算法步骤如下:
设图象包含L个灰度级(0,1…,L-1),灰度值为i的的象素点数为Ni ,图象总的象素点数为N=N0+N1+...+N(L-1)。灰度值为i的点的概为:
P(i) = N(i)/N.
门限t将整幅图象分为暗区c1和亮区c2两类,则类间方差σ是t的函数:
σ=a1*a2(u1-u2)^2 (2)
式中,aj 为类cj的面积与图象总面积之比,a1 = sum(P(i)) i->t, a2 = 1-a1; uj为类cj的均值,u1 = sum(i*P(i))/a1 0->t, 
u2 = sum(i*P(i))/a2, t+1->L-1 
该法选择最佳门限t^ 使类间方差最大,即:令Δu=u1-u2,σb = max{a1(t)*a2(t)Δu^2}

/****************************************以下部分内容为原创;OTSU代码**********************************************/

首先是自己实现的OTSU,原来不知道MATLAB直接有就自己编了……崩溃啊!

[plain] view plaincopy print?
  1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2. %OTSU 最大类间方差法图像分类
  3. %该方法将图像分为前景和背景两部分,背景和目标之间的类间方差越大,说明构成图像的2部分的差别越大,
  4. %当部分目标错分为背景或部分背景错分为目标都会导致2部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。
  5. %Command 中调用方式: OTSU('D:\Images\pic_loc\1870405130305041503.jpg')
  6. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  7. function th=thresh_md(a);
  8. x=imread(a);
  9. a=rgb2gray(x);
  10. subplot(211);
  11. imshow(a,[]);
  12. %[count x]=imhist(a);
  13. [m,n]=size(a);
  14. N=m*n;
  15. L=256;
  16. for i=1:L
  17. count(i)=length(find(a==(i-1)));
  18. f(i)=count(i)/(N);
  19. end
  20. for i=1:L
  21. if count(i)~=0
  22. st=i-1;
  23. break;
  24. end
  25. end
  26. for i=L:-1:1
  27. if count(i)~=0
  28. nd=i-1;
  29. break;
  30. end
  31. end
  32. %f=count(st+1:nd+1);  %f是每个灰度出现的概率
  33. p=st;   q=nd-st;
  34. u=0;
  35. for i=1:q
  36. u=u+f(i)*(p+i-1);  %u是像素的平均值
  37. ua(i)=u;           %ua(i)是前i个像素的平均灰度值
  38. end;
  39. for i=1:q
  40. w(i)=sum(f(1:i));  %w(i)是前i个像素的累加概率
  41. end;
  42. w=w+0.0001;
  43. d=(u*w-ua).^2./(w.*(1-w));
  44. [y,tp]=max(d);  %可以取出数组的最大值及取最大值的点
  45. th=tp+p;
  46. for i=1:m
  47. for j=1:n
  48. if a(i,j)>th
  49. a(i,j)=0;
  50. else
  51. a(i,j)=255;
  52. end
  53. end
  54. end
  55. subplot(212);
  56. imshow(a,[]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%OTSU 最大类间方差法图像分类
%该方法将图像分为前景和背景两部分,背景和目标之间的类间方差越大,说明构成图像的2部分的差别越大,
%当部分目标错分为背景或部分背景错分为目标都会导致2部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。
%Command 中调用方式: OTSU('D:\Images\pic_loc\1870405130305041503.jpg')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function th=thresh_md(a); x=imread(a); a=rgb2gray(x); subplot(211);imshow(a,[]);%[count x]=imhist(a); [m,n]=size(a); N=m*n; L=256; for i=1:Lcount(i)=length(find(a==(i-1)));f(i)=count(i)/(N);
endfor i=1:L if count(i)~=0 st=i-1; break; end
end
for i=L:-1:1 if count(i)~=0 nd=i-1; break; end
end
%f=count(st+1:nd+1);  %f是每个灰度出现的概率
p=st;   q=nd-st;
u=0;
for i=1:q u=u+f(i)*(p+i-1);  %u是像素的平均值  ua(i)=u;           %ua(i)是前i个像素的平均灰度值
end; for i=1:q w(i)=sum(f(1:i));  %w(i)是前i个像素的累加概率
end; w=w+0.0001;d=(u*w-ua).^2./(w.*(1-w));
[y,tp]=max(d);  %可以取出数组的最大值及取最大值的点
th=tp+p; for i=1:m for j=1:n if a(i,j)>th a(i,j)=0; else a(i,j)=255; end end
end
subplot(212);
imshow(a,[]);

下面直接调用MATLAB的函数:

[plain] view plaincopy print?
  1. I=imread('D:\Images\pic_loc\1870405130305041503.jpg');
  2. a=rgb2gray(I);
  3. level = graythresh(a);
  4. a=im2bw(a,level);
  5. imshow(a,[]);

I=imread('D:\Images\pic_loc\1870405130305041503.jpg');
a=rgb2gray(I);
level = graythresh(a);
a=im2bw(a,level);
imshow(a,[]);

实验结果:

OSTU 最佳全局阈值处理-最大类间方差法相关推荐

  1. 图像分割 - 阈值处理 - 最大类间方差法(OTSU)

    目录 1. OTSU 介绍 2. 代码实现 1. OTSU 介绍 OTSU 大津法,也是最大类间方差算法 OTSU 算法的思想通过不同的阈值K,将图像的分为两个区域,一个是灰度值 0 <= k ...

  2. 【机器视觉学习笔记】大津法/Otsu最大类间方差法 最佳阈值处理(C++)

    目录 概念 C++源码 OtsuThreshold 主函数 效果 完整源码 平台:Windows 10 20H2 Visual Studio 2015 OpenCV 4.5.3 本文所用源码修改自C+ ...

  3. Ostu最大类间方差法的C++实现

    一.Ostu的原理 最大类间方差法是由日本学者大津(Nobuyuki Ostu)在1979年提出的,该方法根据计算公式自动计算分割单域值,是一种根据灰度图像自动计算阈值的方法.它按照灰度图像的灰度值等 ...

  4. 数字图像处理实验(六)|图像分割{阈值分割、直方图法、OTUS最大类间方差法(edge、im2dw、imfilter、imresize)、迭代阈值法、点检测}(附matlab实验代码和截图)

    文章目录 一.实验目的 二.实验原理 (一) 阈值分割 1. 直方图法 2.OTSU法(最大类间方差法)确定阈值 3. 迭代阈值法 4. 点检测 (二)边缘检测 三.实验内容 (一)阈值分割 1. 直 ...

  5. 最大类间方差法(大津法OTSU)原理

    算法介绍 最大类间方差法是1979年由日本学者大津提出的,是一种自适应阈值确定的方法,又叫大津法,简称OTSU,是一种基于全局的二值化算法,它是根据图像的灰度特性,将图像分为前景和背景两个部分.当取最 ...

  6. CUDA精进之路(五):图像处理——OTSU二值算法(最大类间方差法、大津法)

    引言 最近在做医疗设备相关的项目,故在项目中大量用到了各类图像分割的算法,为了在图像中分割出特定目标,用到的算法可以有很多,比如阈值分割,多通道分割,边缘分割以及一些前沿的组合分割.而对大多数图像来说 ...

  7. 基于OTSU最大类间方差法的ROI分割、提取图像中的形状特征--面积、周长、离心率、zernike矩

    分享一下最近学习的图像分类方面知识,整体的思路如下(之前的汇报ppt里截的) 把这个过程拆分几个部分共同学习一下吧 1.Otsu法原理 最大类间方差法OTSU是一种自适应的全局阈值确定的方法,根据灰度 ...

  8. 基于遗传算法的二维最大类间方差法的图像分割优化

    一.背景 最大类间方差阈值分割法日本大津展之在1980年提出的,其基本思路是将图像的直方图以某一灰度为阈值,将图像分成两组并计算两组的方差,当被分成的两组之间的方差最大时,就以这个灰度值为國值分割图像 ...

  9. 图像二值化之最大类间方差法(大津法,OTSU)

    参考文章1:图像二值化与otsu算法介绍 参考文章2:python opencv cv2.threshold() (将固定级别的阈值应用于每个数组元素)ThresholdTypes 最大类间方差法(大 ...

  10. opencv与C++实现最大类间方差法(OTSU)进行图像二值化

    直接上代码,使用最大类间方差法进行二值化的函数 void threshold_otsu(Mat &mat, Mat &mat_thresh) //mat为输入图像,mat_thresh ...

最新文章

  1. JAVA Functions in XI(转)
  2. 终于“打造”出了一个可以随时随地编程的工具
  3. python画直方图成绩分析-使用Python进行描述性统计
  4. (笔试题)小米Git
  5. 字节码编辑器JClassLIb下载教程
  6. Mask-RCNN中的ROIAlign, ROIPooling及ROIWarp对比
  7. 审稿意见说我引言和结论写的毫无差别!
  8. 移动端图片上传后进行压缩功能
  9. JBoss-4.2.3.GA下发布EJB3项目遇到的问题之JSF篇
  10. python编写代码实现文件的拷贝功能_如何使用Python脚本实现文件拷贝
  11. 访问win10的远程桌面(Remote Desktop)总是凭据或者用户密码错误
  12. Android+8.0+微信表情,微信8.0表情为什么不动?微信8.0哪些表情有动画效果?
  13. 电脑键盘快捷键使用大全
  14. “00后”消费数据分析,一文教你撩动“00后”购物欲
  15. 机器学习.周志华《15 规则学习 》
  16. package.json文件指南
  17. 微信小程序在线成语接龙答题有奖1.5.1版源码
  18. Android12,SCHEDULE_EXACT_ALARM权限检查值一直返回true
  19. 电脑——如何配置一台电脑
  20. 是对计算机系统或其他网络设备进行,计算机信息系统是由计算机及其相关的和配套的设备、设施(含网络)构成的,按照一定的应用目标和规则对信息进行()等处理的人机系统。...

热门文章

  1. 3D打印行业入行总结
  2. 计算机键盘芯片,电脑键盘芯片详解中文.pdf
  3. 局域网打印机怎么连接_苹果手机怎么连打印机?苹果系统怎么连接网络打印机?一看就会...
  4. tpac100控制器设置教程_AC100基站控制器配置说明
  5. 阿里云服务器如何登录?阿里云服务器的三种登录方法
  6. 支持傲腾技术的服务器主板,G4560可以用傲腾内存么
  7. 测开面试题大全及答案(含测试基础|实例介绍|软件本地化测试等)
  8. 一个放在口袋里的项目,将社交裂变做到了极致
  9. 01背包与完全背包详解
  10. petalinux 建立工程两种方式