【阈值分割】最大熵分割法

更新时间:2023-07-20 19:03:47 阅读: 评论:0

【阈值分割】最⼤熵分割法
第⼀次尝试写博客,希望能坚持下去。。。
最近在做红外⼩⽬标检测,⽤到⼀个最⼤熵分割法,ok,下⾯介绍⼀下。
最⼤熵分割法
恭宽信敏惠
现在主要⽤的熵算法有 P ⽒熵算法,KSW 熵算法、JM 熵算法下⾯以经典的 KSW 熵算法为例介绍其原理和计算过程。KSW熵算法
设分割阈值为设分割阈值为t,
T为{0,1,2,...t}的灰度分布,B为{t+1,t+2,...L-1}的灰度分布,则概率分布为:
式中
则这两个概率密度相关的熵为:
定义函数φ(t)为H(T)和H(B)的和,则
求出φ(t)最⼤时的灰度级t即为所求的最佳阈值。
代码如下:
#include <cv.h>
#include <opencv2/opencv.hpp>
手机流量限速#include <opencv2/legacy/legacy.hpp>
using namespace cv;
float calc_entropy(CvHistogram *hist, int begin, int end)
{
float total = 0;  // 总概率
// 得到总的Pi
for(int i = begin; i < end; i++)
{
冰箱保鲜
total += cvQueryHistValue_1D(hist,i);
}
float entropy = 0;  // 熵
for(int i = begin; i < end; i++)
{
float probability = cvQueryHistValue_1D(hist, i);
if(probability == 0)
if(probability == 0)
continue;
probability /= total;
entropy += -probability*log(probability);
个人展示
}三国人物介绍大全
return entropy;
}
int ksw_entropy(IplImage *img)
{
asrt(img != NULL);
asrt(img->depth == 8);
asrt(img->nChannels == 1);
float range[2] = {0,255};
float *ranges[1] = {&range[0]};
int sizes = 256;
/伞房决明
/ 创建直⽅图
CvHistogram *hist = cvCreateHist(1, &sizes, CV_HIST_ARRAY, ranges, 1);
// 直⽅图计算
cvCalcHist(&img, hist, 0, 0);
// 直⽅图归⼀化
cvNormalizeHist(hist, 1.0);
int threshold = 0;
float max_entropy = 0;
// 循环计算,得到做⼤熵以及分割阈值
for(int i = 0; i < sizes; i++)
{
float entropy = calc_entropy(hist, 0, i) + calc_entropy(hist, i+1, sizes);
if(entropy > max_entropy)
{
max_entropy = entropy;
threshold = i;
}
}
return threshold;
}
int main(int argc, char **argv)
{
IplImage *img = cvLoadImage("1.bmp", CV_LOAD_IMAGE_GRAYSCALE);
u盘文件加密IplImage *reimg = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);
int threshold = ksw_entropy(img);
cvThreshold(img, reimg, threshold, 255, CV_THRESH_BINARY);
cvNamedWindow("img");
cvShowImage("img", img);
cvNamedWindow("reimg");
cvShowImage("reimg", reimg);
cvWaitKey(0);
return 0;
}
在学习获取灰度直⽅图的时候,有⼀个函数让我费解了半天,cvNormalizeHist,灰度归⼀化,刚开始就是搞不懂这个灰度归⼀化是指的什么,
opencv给出的函数解释如下:
南非葡萄酒什么叫the sum of the bins becomes equal to factor,好吧,后来明⽩了,其实意思就是说,把直⽅图纵坐标的值相加的和等于第⼆个参数,所以如果设为1的话,那纵坐标的值就是该灰度级的概率了。
下⾯是实验图⽚:
图1  原图                                          图2  最⼤熵阈值分割后图⽚
效果很不理想吧,所以在做阈值分割前需要加⼊tophat,后⾯博客会讲到。
全⽂完。

本文发布于:2023-07-20 19:03:47,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1089482.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:灰度   函数   阈值   介绍   计算   分割   相加   参数
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图