最大熵阈值分割法
来源:互联网 发布:武汉国企java招聘信息 编辑:程序博客网 时间:2024/06/07 16:48
(1)什么是熵?
熵是用来衡量一个分布的均匀程度,熵越大,说明分布越均匀。在信息论中,信息熵可以说明消息的混沌程度,熵越大说明消息越不明了,难以从消息中得到有效信息。举一个超级简单的例子,比如说我假设一辆车开到了一个T字型的路口,限定它必须要么左转,要么右转,设左转的概率是P1,右转的概率是P2,除此之外没有任何信息了,问如何估计P1和P2?你现在有的信息仅仅是P1+P2=1而已,按最大熵的思想,既然你没有其他任何信息来说明向左转的可能性比向右转的可能性大(或小),那就应该把它们两一视同仁,同等对待,不能偏袒其一,于是就应该是P1=P2=1/2,这就是最大熵的思想。仔细想想还是挺有道理的,假设你觉得这样不是最合适的解,你给出了另一个解P1=3/4,P2=1/4那就要问了,凭什么往左转的概率比往右转的大呢?已经没有任何信息再支持你的判断了呀。因此,只能把它们两同行对待了。事实上,P1=P2=1/2这个分布的熵比这个P1=3/4,P2=1/4分布的熵要大,因为前者比后者均匀,越均匀熵越大,就越是同等对待(均匀的意思就是大家都一样)。
(2)熵的定义
(3)最大熵阈值分割原理
利用图像熵为准则进行图像分割是由Kapuret提出来,现在仍然使用较广的一种图像熵分割方法。原论文《A New Method forGray-Level Picture ThresholdingUsing the Entropy of the Histogram》,在百度学术上可以免费下载。
给定一个特定的阈值q(0<=q<K-1),对于该阈值所分割的两个图像区域C0,C1,其估算的概率密度函数可表示为:
P0(q),P1(q)分别表示的是q阈值分割的背景和前景像素的累计概率,两者之和为1。背景和前景对应的熵表示如下:
在该阈值下,图像总熵为:
计算所有分割阈值下的图像总熵,找到最大的熵,将最大熵对应的分割阈值作为最终的阈值,图像中灰度大于此阈值的像素作为前景,否则作为背景。
分割阈值的选取是困难的,我们在算法中选取了256个分割阈值,也就是256级灰度,从第1级灰度一直计算到第256级灰度,因此有256个图像总熵,找到最大的总熵及其位置,例如是第50个,那么最终的分割阈值就是灰度=50。
MATLAB代码如下:
clearImag = imread('rice.png');[X, Y] = size(Imag);figure ();imhist(Imag); % 计算图像直方图hist = imhist(Imag);p = hist/(X*Y); % 各灰度概率 sumP = cumsum(p);sumQ = 1-sumP; %将256个灰度作为256个分割阈值,分别计算各阈值下的概率密度函数c0 = zeros(256,256);c1 = zeros(256,256);for i = 1:256 for j = 1:i if sumP(i) > 0 c0(i,j) = p(j)/sumP(i); %计算各个阈值下的前景概率密度函数 else c0(i,j) = 0; end for k = i+1:256 if sumQ(i) > 0; c1(i,k) = p(k)/sumQ(i); %计算各个阈值下的背景概率密度函数 else c1(i,k) = 0; end end end end %计算各个阈值下的前景和背景像素的累计熵H0 = zeros(256,256);H1 = zeros(256,256);for i = 1:256 for j = 1:i if c0(i,j) ~=0 H0(i,j) = - c0(i,j).*log10(c0(i,j)); %计算各个阈值下的前景熵 end for k = i+1:256 if c1(i,k) ~=0 H1(i,k) = -c1(i,k).*log10(c1(i,k)); %计算各个阈值下的背景熵 end end end endHH0 = sum(H0,2);HH1 = sum(H1,2);H = HH0 + HH1; [value, Threshold] = max(H); BW = im2bw(Imag, Threshold/255);figure ();imshow(BW);xlabel(['最大熵', num2str(Threshold)]);
- 最大熵阈值分割法
- 最大熵阈值分割法
- 【阈值分割】最大熵分割法
- 最大熵阈值分割
- 最大熵阈值分割
- 最大熵阈值分割
- 最大熵阈值分割算法
- 最大熵阈值分割代码
- 七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
- 常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
- 自适应阈值分割方法(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
- 七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
- 七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
- 七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
- 最大熵阈值分割算法的C语言实现
- 二维最大熵阈值分割原理与opencv实现
- 最大熵阈值分割——opencv与matlab实现
- OpenCV学习笔记(二)之最大熵阈值分割
- 递归
- mybatis分页插件配置
- 古文觀止卷九_捕蛇者說_柳宗元
- OpenCV检测圆并求出圆心与半径
- caffe目标检测踩坑记(三)
- 最大熵阈值分割法
- 使用IntelliJ IDEA编写自己的第一个java程序
- 学习Java小结
- MYSQL数据库 初学笔记2
- mark一下, 我的csdn博客超过5万分啦
- Java安装配置环境变量及介绍数据类型
- Til the Cows Come Home(poj 2387 Dijkstra算法)
- java四大引用
- 机器学习常见的算法面试题总结