3.6.1最大熵阈值分割寻找阈值实现图像二值化

摘要:
4#包括<targetSum<threshold)33{34if(pDataHist[i]==0)35继续;58calcHist(&59floatmax熵=0;62for(inti=0;i<max熵)66{67max熵=cur_entropy;\hand.jpg“);结果);85返回0;
3.6.1最大熵阈值分割寻找阈值实现图像二值化第1张3.6.1最大熵阈值分割寻找阈值实现图像二值化第2张
 1 #include <opencv2/imgproc/imgproc.hpp>
 2 #include <opencv2/core/core.hpp>
 3 #include <opencv2/highgui/highgui.hpp>
 4 #include <iostream>
 5 
 6 using namespace cv;
 7 using namespace std;
 8 
 9 //按给定的threshold,计算hist的背景熵和目标熵的总和
10 float caculateCurrentEntropy(Mat hist, int threshold)
11 {
12     float BackgroundSum = 0, targetSum = 0;
13     const float* pDataHist = (float*)hist.ptr<float>(0);
14     for (int i = 0; i < 256; i++)
15     {
16         //累计背景值
17         if (i < threshold)
18         {
19             BackgroundSum += pDataHist[i];
20         }
21         //累计目标值
22         else
23         {
24             targetSum += pDataHist[i];
25         }
26     }
27     cout << BackgroundSum << "	" << targetSum << endl;
28     float BackgroundEntropy = 0, targetEntropy = 0;
29     for (int i = 0; i < 256; i++)
30     {
31         //计算背景熵
32         if (i < threshold)
33         {
34             if (pDataHist[i] == 0)
35                 continue;
36             float ratio1 = pDataHist[i] / BackgroundSum;
37             //计算当前能量熵
38             BackgroundEntropy += -ratio1*logf(ratio1);
39         }
40         else  //计算目标熵
41         {
42             if (pDataHist[i] == 0)
43                 continue;
44             float ratio2 = pDataHist[i] / targetSum;
45             targetEntropy += -ratio2*logf(ratio2);
46         }
47     }
48     return (targetEntropy + BackgroundEntropy);
49 }
50 //寻找最大熵阈值并分割,根据该阈值进行二值化
51 Mat maxEntropySegMentation(Mat inputImage)
52 {
53     const int channels[1] = { 0 };
54     const int histSize[1] = { 256 };
55     float pranges[2] = { 0,256 };
56     const float* ranges[1] = { pranges };
57     MatND hist;
58     calcHist(&inputImage, 1, channels, Mat(), hist, 1, histSize, ranges);
59     float maxentropy = 0;
60     int max_index = 0;
61     Mat result;
62     for (int i = 0; i < 256; i++)
63     {
64         float cur_entropy = caculateCurrentEntropy(hist, i);
65         if (cur_entropy > maxentropy)
66         {
67             maxentropy = cur_entropy;
68             max_index = i;
69         }
70     }
71     threshold(inputImage, result, max_index, 255, CV_THRESH_BINARY);
72     return result;
73 }
74 int main()
75 {
76     Mat srcImage = imread("D:\hand.jpg");
77     if (!srcImage.data)
78         return -1;
79     Mat grayImage;
80     cvtColor(srcImage, grayImage, CV_BGR2GRAY);
81     Mat result = maxEntropySegMentation(grayImage);
82     imshow("grayImage", grayImage);
83     imshow("result", result);
84     waitKey(0);
85     return 0;
86 }
View Code

 运行效果:

3.6.1最大熵阈值分割寻找阈值实现图像二值化第3张

3.6.1最大熵阈值分割寻找阈值实现图像二值化第4张

免责声明:文章转载自《3.6.1最大熵阈值分割寻找阈值实现图像二值化》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇NPM 和 Yarn 使用国内淘宝镜像源提升各依赖安装速度CRM开发手记 Javascript Keycode下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

html常用标签以及css基本属性和选择器

html常用标签 一般格式为: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7...

DbEntry 简单实现

在着手编码之前首先安装DbEntry DbEntry.Net.4.1.Setup.zip 在建立类库时选择 DbEntryClassLibrary 如图  DbEntryClassLibrary1 中建立 实体和数据库访问类 如下 1 public class Company :DbObjectModel<Company,int>...

01. go-admin的下载与启动

目录 一.介绍 二.新建空文件夹 三.获取后台源码并启动 1.下载编译go代码 2.配置命令到goland IDE ,debug启动 四.获取前端ui源码并启动 1.下载编译go代码 2.启动项目 ** go-admin 基于Gin + Vue + Element UI的前后端分离权限管理系统** 系统初始化极度简单,只需要配置文件...

vue中选择图片,预览图片,返回base64

1.html内容 <el-col :span="20" style="margin-left: 100px;"> <input type="file" name="avatar" accept="image/gif,image/jpeg,image/jpg,image/png" @change="changeCoverImg($ev...

链表面试题

1、逆置链表 假设链表现在是 4->3->2->1->NULL逆置后的链表是 1->2->3->4->NULL步骤:第一步:先把4用临时指针tmp保存起来,cur指向下一个节点,即cur指向3 第二步:令tmp指向newNode,4是第一个节点,则4的next为NULL,即令tmp->next =ne...

可用的rtmp互联网地址

rtmp://live.hkstv.hk.lxdns.com/live/hks 测试可用。 vlc使用ffmpeg取rtmp网络流。 代码文件路径: vlc-2.2.1modulesaccessavio.h vlc-2.2.1modulesaccessavio.c 在模块的open回调函数OpenAvio里,使用如下代码打开一个rtmp网络流。 avio_...