MATLAB实现OTSU
@
1.OTSU算法原理简述:
最大类间方差是由日本学者大津(Nobuyuki Otsu)于1979年提出,是一种自适应的阈值确定方法。算法假设图像像素能够根据阈值,被分成背景[background]和目标[objects]两部分。然后,计算该最佳阈值来区分这两类像素,使得两类像素区分度最大。
公式: 记 M = 256 单通道灰度分级 Sum = 像素总数
2.MATLAB实现代码
clc
clear
x=imread('radiogirl.jpg');
a=x;
subplot(211);
imshow(a,[]);
%[count x]=imhist(a);
[m,n]=size(a);
N=m*n;
L=256;
for i=1:L
count(i)=length(find(a==(i-1)));
f(i)=count(i)/(N); %每个灰度对应的概率,i=1,对应灰度值为0(i-1)
end
for 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
p=st; q=nd-st+1;
u=0;
for i=1:q
u=u+f(p+i)*(p+i-1); %u是像素的平均值
ua(i)=u; %ua(i)是前i+p个像素的平均灰度值 (前p个无取值)
end;
for i=1:q
w(i)=sum(f(1+p:i+p)); %w(i)是前i个像素的累加概率,对应公式中P0
end;
w=w+eps;
%对照sigmaB的公式写出目标函数。实际是遍历所有值
d=(w./(1-w)).*(ua./w-u).^2;
[y,tp]=max(d); %可以取出数组的最大值及取最大值的点
th=tp+p;
subplot(212);
imshow(im2bw(a,th/255),[]); title('自己的最大类间方差');
subplot(211);
imshow(im2bw(x,graythresh(x)),[]); title('matlab自带');
结果
可以看到自己编写的与matlab自带效果相同。
MATLAB实现OTSU的更多相关文章
- 图像处理MATLAB源代码
图像反转 I=imread('nickyboom.jpg'); J=double(I); J=-J+(256-1); %图像反转线性变换 H=uint8(J); sub ...
- matlab图像处理程序大集合
1.图像反转 MATLAB程序实现如下:I=imread('xian.bmp');J=double(I);J=-J+(256-1); %图像反转线性变换H=uint8( ...
- paper 55:图像分割代码汇总
matlab 图像分割算法源码 1.图像反转 MATLAB程序实现如下:I=imread('xian.bmp');J=double(I);J=-J+(256-1); %图像反转线性变换H=uint8( ...
- 遗传学详解及Matlab算法实现
遗传学算法概述 从之前转载的博客<非常好的理解遗传算法的例子>中可以知道,遗传学算法主要有6个步骤: 1. 个体编码 2. 初始群体 3. 适应度计算 4. 选择运算 5. 交叉运算 6. ...
- 图像二值化----otsu(最大类间方差法、大津算法)
最大类间方差法是由日本学者大津于1979年提出的,是一种自适应的阈值确定的方法,又叫大津 法,简称OTSU.它是按图像的灰度特性,将图像分成背景和目标2部分.背景和目标之间的类间方差越大,说明构成图像 ...
- Matlab 多项式拟合、稳健滤波等实用函数
Function summary http://www.biomecardio.com/matlab/index.html clinspace Curvilinearly spaced points ...
- 图像处理------基于Otsu阈值二值化
一:基本原理 该方法是图像二值化处理常见方法之一,在Matlab与OpenCV中均有实现. Otsu Threshing方法是一种基于寻找合适阈值实现二值化的方法,其最重 要的部分是寻找图像二值化阈值 ...
- 大津法---OTSU算法
简介: 大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出.从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景 ...
- 基于Otsu算法的图像自适应阈值切割
在图像处理实践中,将灰度图转化为二值图是非经常见的一种预处理手段. 在Matlab中,能够使用函数BW = im2bw(I, level)来将一幅灰度图 I.转化为二值图. 当中.參数level是一个 ...
随机推荐
- es实战一:基本概念
基本概念 可以对照数关系型据库来理解Elasticsearch的有关概念. Relational DB Elasticsearch Databases Indices Tables Types Row ...
- BZOJ 1420: Discrete Root (原根+BSGS)
题意 已知kkk, aaa, ppp. 求 xk≡a (mod p)x^k\equiv a\ (mod\ p)xk≡a (mod p) 的所有根. 根的范围[0,p−1][0,p-1][0,p−1]. ...
- PHP基础之搭建WAMP环境
访问 http://www.wampserver.com/en/ 点击 点击 点击 由于WAMP需要 Microsoft Visual C++运行库支持,请先到 这里 下载VC++2012运行库.官方 ...
- css百分比值到底参考谁?
一.元素宽高设置百分比 (1)width / min-width / max-width 参考块级父元素的宽度 (2)height / min-height / max-height 参考块级父元素的 ...
- linux系统下nginx/mysql/php启动、停止、重启命令
/usr/local/nginx/sbin/nginx /etc/init.d/mysql start /usr/local/php/sbin/php-fpm start #nginx命令 ...
- MessagePack Java Jackson 在不关闭输出流(output stream)的情况下序列化多变量
com.fasterxml.jackson.databind.ObjectMapper 在默认的情况下在写出输入后将会关闭输出流(output stream). 如果你希望序列化多值变量在同一个输出流 ...
- Trie树(c++实现)——转载自jihite的博客
Trie树(c++实现) 原理 先看个例子,存储字符串abc.ab.abm.abcde.pm可以利用以下方式存储 上边就是Trie树的基本原理:利用字串的公共前缀来节省存储空间,最大限度的减少无谓 ...
- k8s集群节点更换ip 或者 k8s集群添加新节点
1.需求情景:机房网络调整,突然要回收我k8s集群上一台node节点机器的ip,并调予新的ip到这台机器上,所以有了k8s集群节点更换ip一说:同时,k8s集群节点更换ip也相当于k8s集群添加新节点 ...
- WordPress显示评论者IP归属地、浏览器、终端设备、电信运营商
在网上查资料闲逛,偶然间看到了张戈博客的评论框有点意思,于是就收走拿到了我的米扑博客. 本文为米扑博客原创:总结分享 WordPress显示评论者IP归属地.浏览器.终端设备.电信运营商 WordPr ...
- [c++] C++多态(虚函数和虚继承)
转自:https://www.jianshu.com/p/02183498a2c2 面向对象的三大特性是封装.继承和多态.多态是非常重要的一个特性,C++多态基于虚函数和虚继承实现,本文将完整挖掘C+ ...