3.6.1最大熵阈值分割寻找阈值实现图像二值化
![](/assets/blank.gif)
![](/assets/blank.gif)
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 << "\t" << 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
运行效果:
转载于:https://www.cnblogs.com/thebreakofdawn/p/9430349.html
3.6.1最大熵阈值分割寻找阈值实现图像二值化相关推荐
- otsu阈值分割算法原理_OTSU_图像二值化分割阈值的算法
简介: 大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出.从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景 ...
- 利用最大熵进行阈值分割从而实现灰度图像的二值化的原理概要及OpenCV代码
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 详细的数学原理目前我也没搞明白,所以只说下原理概 ...
- 图像二值化处理(全局阈值 自适应阈值 手动阈值操作以及直方图画法)
文章目录 图像二值化处理 二值化原理 API介绍 手动设置阈值 均值法 迭代法 自动设置阈值 直方图法 全局阈值法 OTSU法 三角形法 自适应阈值法 API 绘制图像直方图 图像二值化处理 二值化原 ...
- opencv 图像分割 阈值分割 图像二值化 灰度图
# -*- coding: utf-8 -*- """ @File : 191213_测试_阈值分割.py @Time : 2019/12/13 15:14 @Autho ...
- OTSU_图像二值化分割阈值的算法
简介: 大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出.从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景 ...
- 【医学图像处理】 2 灰度直方图、图像二值化(阈值分割)
文章目录 1 灰度直方图 1.1 直方图理解 1.2 直方图计算 1.3 直方图均衡化 1.3.1 全局均衡化 1.3.2 自适应(局部)均值化 2 图像二值化(阈值分割) 2.1 二值化理解 2.2 ...
- C#,图像二值化(15)——全局阈值的一维最大熵(1D maxent)算法及源程序
1.最大熵(maxent) 最大熵(maxent)方法植根于信息理论,并已成功应用于许多领域,包括物理学和自然语言处理.它创建了一个模型,该模型最好地解释了可用数据,但有一个约束,即在没有任何附加信息 ...
- opencv进阶学习9:图像阈值大全,图像二值化,超大图像二值化
基础版笔记链接: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 基础版二值化讲解 opencv ...
- C#,图像二值化(20)——全局阈值的耶恩算法(Yen Thresholding)及源代码
1 全局阈值的耶恩算法(Yen Throsholding) 常见阈值算法 1.1黄算法 HuangThresholdImageFilter使用Shannon的熵函数实现Huang的模糊阈值[1].模糊 ...
- 图像二值化_三角阈值法
前言 一.三角阈值法是什么? 二.算法原理 1.算法 总结 参考文献 前言 图像二值化有很多方法,比较经典的为OTSU,三角阈值法,本文主要想一探三角阈值法的算法原理. 一.三角阈值法是什么? 三角阈 ...
最新文章
- 最快捷的Linux命令查询工具来了:「我该怎么做XX」,一句话自动返回操作指南...
- python booleans_Python 2.1 BooleansComparisons
- python虚拟环境的使用
- python去重语句_Python对列表去重的多种方法(四种方法)
- 用border做三角形
- 用MaskNetwork代币MASK首轮公开销售已结束,今晚23:00将进行第二轮售卖
- topsis法_论文荐读|基于风险响应概念模型和改进TOPSIS模型的半干旱流域生态风险综合评价——以渭河流域为例...
- 广告公司管理软件介绍
- 图像压缩工具ImageOptim介绍
- 大数据Hadoop之——Cloudera Hadoop(CM 6.3.1+CDH 6.3.2环境部署)
- 设置计算机用户权限,计算机管理员权限在哪里设置_电脑系统如何设置管理员权限-win7之家...
- 谱密度 matlab,功率谱密度估计方法的matlab实现.doc
- java后端实现集成支付宝APP支付(沙箱环境)
- php输出世界时转北京时,php中把美国时间转为北京时间的自定义函数分享
- Oracle 自动存储管理 (ASM)
- 拉格朗日对偶问题的一些介绍
- 嵌入式开发入门之经典 ARM开发板
- 悟空CRM-11.0正式开源发布!
- 横板格斗类游戏实战:游戏数值策划表
- 能源变革--数字孪生变电站,机器人巡检更胜一筹!
热门文章
- C# DateTime 日期加1天 减一天 加一月 减一月 等方法
- 《设计模式详解》行为型模式 - 中介者模式
- 【恋上数据结构】图基础知识介绍
- 【恋上数据结构】冒泡排序、选择排序、堆排序
- [转]5个有趣的Python小知识,返回结果让人出乎意料~
- Linux上的ffmpeg完全使用指南
- 期货品种产业链图表_工业
- 银行有没有必要建立数据中台?看看这些架构师和技术总监怎么说
- 论制造业的报表开发项目需求
- views是什么意思_views是什么意思_views怎么读_views翻译_用法_发音_词组_同反义词_看( view的名词复数 )-新东方在线英语词典...