c语言实现灰度图像阈值分割,灰度图像--图像分割 阈值处理之平均阈值

学习DIP第52天

转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro

开篇空话

好久没写博客了,已然不熟练了,过完年全部人都不好了,哈哈,到刚才为止算是把图象分割学习了1下,这两天把学习结果和代码简单总结1下。

前面已介绍了边沿检测,和边沿修复,阈值处理的基本概念也进行了1定介绍。阈值处理速度快,算法简单,所以利用比较广泛,算法的基本问题在于计算出阈值处理的阈值,在接下来的几篇我可,介绍几种肯定阈值的算法,基本数学知识都来自统计学,包括最简单的平均数,p-分位数,方差等数学知识。

下面就从最简单的均值阈值开始介绍。

平均阈值

均值处理属于阈值中最简单的1种,其使用的1副图象所有灰度的均值作为阈值,分割图象。

根据统计学知识,求均值可使用几率方法:

1. 计算图象灰度直方图

2. 归1化直方图,得出直方图每项的几率

3. 直方图的横坐标与几率的成绩然后求和threshold=mean=∑L?1i=0p(i)×i

根据以上均值得到阈值,然后根据阈值处理基本公示处理整幅图象。

代码

/*********************************************************************************/

/*********************************************************************************/

计算从start到end的直方图的平均值,hist未归1化

double getMeaninHist(int start,int end,int *hist){

int hist_count=0;

double hist_value=0;

for(int i=start;i

hist_count+=hist[i];

hist_value+=(double)hist[i]*i;

}

return hist_value/(double)hist_count;

}

/*********************************************************************************/

/*********************************************************************************/

//均值法求阈值

//阈值等于全图的像素的平均值

void MeanThreshold(double *src,double *dst,int width,int height,int type){

int hist[GRAY_LEVEL];

double threshold_value=0.0;

InitHistogram(hist);

setHistogram(src, hist, width,height);

threshold_value=getMeaninHist(0, GRAY_LEVEL, hist);

Threshold(src,dst, width, height, threshold_value,type);

}

结果

视察1下结果:

原图:20820e9cd57d6c9f31b56f93dc040ded.png

原图直方图:ad774d9e97618e9b753a10efb64f8ea1.png

平均阈值:d5f1eaf461f53b9bab69d0b8e6cd76b7.png

阈值处理结果:dc4180d17198dedb5b20769a2aec00a3.png

原图加入1%的高斯噪声

未处理:46a2b0b6e5f962e3bc3601dcaab077eb.png

直方图:7d35016a914d845642defcf7c0b1fe92.png

平均阈值:85f3a76f49d606b7006d9def84bd3802.png

阈值处理结果:476ce724bef202a32b170bf062589b2b.png

原图加入5%的高斯噪声

未处理:0bfd260a690e88489096fc599936010a.png

直方图:259814608ca8614d6b7de475be9c0e16.png

平均阈值:dc56a5e9c04521453674f14147f52c16.png

阈值处理结果:e81783bf836e546a5754c183038849e4.png

原图加入7%的高斯噪声

未处理:7de85ee780c6460159c8d55ee892124a.png

直方图:6bcc9f1c8b6240a88f89ed75bd937334.png

平均阈值:710c9e1216253ce856fe0120483aa8ef.png

阈值处理结果:f21798224bf2975b66aef678fcbf8be7.png

lena图均值阈值处理:

原图:6a0478c53680131faa509e821faedc52.png

处理后结果:99ca5035231676f9f8e1606a6c2126f9.png

阈值:882ad603d908a21e106c7d33eb12d7e3.png

总结

均值阈值可以完成1些较为简单的的处理,但对目标与背景的大小敏感,也就是直方图那两个峰的面积大小有关,如果这两个峰相对大小相差不多,那末均值相对效果较好,如果两个峰相差太多,也就是背景比目标大很多或相反目标比背景大很多时,结果失效。其次也遭到噪声影响,但没有上1因素影响大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构——二叉树的双序遍历

设计二叉树的双序遍历算法(双序遍历是指对于二叉树的每一个结点来说,先访问这个结 点,再按双序遍历它的左子树,然后再一次访问这个结点,接下来按双序遍历它的右子树 思路: 1.双序遍历与中序遍历类似,是中序遍历的变形 2.中序遍历是指对于二叉树的每一…

python如何封装成可调用的库_Python实现打包成库供别的模块调用

1.创建python项目bricewulib2.新建test_package包并创建info1类以及print_hello方法3.为了让包的结构再复杂点,我们再在test_package下面新建一个test_package2包并创建Info2类以及print_hello2方法(注意:这里是Info2,不是上面的I…

从零开始实现 ASP.NET Core MVC 的插件式开发(九) - 如何启用预编译视图

标题:从零开始实现 ASP.NET Core MVC 的插件式开发(九) - 升级.NET 5及启用预编译视图作者:Lamond Lu地址:https://www.cnblogs.com/lwqlun/p/13992077.html源代码:https://github.com/lamondlu/Mystique适用版本:.NET…

数据结构——二叉树的层次遍历进阶

之前的一个博客 数据结构——二叉树的层次遍历看完这个,可以简单实现下面的问题 问题: 1.计算二叉树的最大宽度(二叉树的最大宽度是指二叉树所有层中结点个数的最大值。 2.用按层次顺序遍历二叉树的方法,统计树中具有度为1的结点数目。 解决问题的思路…

future.cancel不能关闭线程_多线程与高并发笔记

1. 创建线程的四种方式实现Runnable 重写run方法继承Thread 重写run方法线程池创建 Executors.newCachedThreadPool()实现Callable接口2. Thread线程操作方法当前线程睡眠指定mills毫秒Thread.sleep([mills])当前线程优雅让出执行权Thread.yield()例如Thread t1, t2&#xff0c…

ANDROID手表怎么设置壁纸,表盘背景随心换 果壳智能手表换壁纸教程

在智能手机和电脑上,我们一般都会换一张自己喜欢的图片作为壁纸,当我们想把一张喜欢的图片做成果壳GEAK Watch表盘时,应该怎么做呢?其实只要简单的几个步骤,你就能获得独一无二的专属表盘。首先,打开一张你…

如何踢掉 sql 语句中的尾巴,我用 C# 苦思了五种办法

一:背景 1. 讲故事这几天都在修复bug真的太忙了,期间也遇到了一个挺有趣bug,和大家分享一下,这是一块sql挺复杂的报表相关业务,不知道哪一位大佬在错综复杂的 嵌套 平行 if判断中sql拼接在某些UI组合下出问题了&#…

数据结构——二叉树的最长路径问题

题目: 求任意二叉树中第一条最长的路径长度,并输出此路径上各结点的值。 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法求出该二叉树中第一条最长的路径。 输入 一行数据,为二叉树的先序序…

.NET 应用如何优雅的做功能开关(Feature Flag)

点击上方蓝字关注“汪宇杰博客”导语曾经,我们要在应用程序里做功能开关,就避免不了在配置文件里加上一堆 bool 类型的配置项,然后在代码里用 if else 去判断。尽管这种做法是可行的,但我们现在有办法让代码更加整洁,避…

鼠标右键 移动选定的文件夹到指定位置_iRightMouse:一款免费Mac鼠标右键增强神器...

如果你是多年的Windows用户转到macOS平台,你必定会发现Windows上很多非常方便的鼠标右键菜单在macOS上都是没有的,例如新建txt文档、一键隐藏文件等。而这些快捷功能的缺失也确实会带来一些不便,奇客君发现一款刚刚上线的免费右键增强工具&am…

数据结构——从叶子结点到根节点的全部路径

问题 给定一个二叉树,返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binary-tree-paths 257.二叉树的所有路径 与…

台电x80plus装linux,纤巧却不简单——台电X80 Plus评测

8英寸平板一直是各平板品牌混战厮杀的大战场。“性价比”是这个尺寸平板好坏的最重要关键字。今天就为大家带来台电8英寸X80 Plus平板电脑的评测。X80 Plus是台电8英寸产品中的最新款,采用的是英特尔新一代CherrTrail架构芯片Atom X5 Z8300。HD核显由原来的Gen7升级…

数据结构——二叉树的递归算法

二叉树的结构定义: typedef struct BiNode {TElemType data;struct BiNode *lchild;struct BiNode *rchild; }BiNode,*BiTree;这里包含的递归算法有: 二叉树的先序创建;二叉树的先序中序后序遍历;二叉树的销毁算法;双…

使用BeetleX访问redis服务

BeetleX针对redis访问封了全async/await操作模式,通过它可以更高效地访问redis服务。BeetleX.Redis提供读写分离和多机故意写入处理,同时安全的TLS访问机制,在使用功能上组件支持绝大部分基础指令,并提供json,protobuf…

鸿蒙系统可以替代安卓吗,华为今天发布的鸿蒙系统,到底能不能替代安卓?

对于大部分差友们来说,“开发者大会”这个词一定显得陌生而又遥远,跟普通的产品发布会不一样,他们面向的对象并不是普通的消费者,而是各种程序猿和攻城狮。话又说回来,能开“ 开发者大会”,也说明这个企业已…

android loading封装_我们经常用的Loading动画居然还有这种姿势

背景Loading动画几乎每个Android App中都有。一般在需要用户等待的场景,显示一个Loading动画可以让用户知道App正在加载数据,而不是程序卡死,从而给用户较好的使用体验。同样的道理,当加载的数据为空时显示一个数据为空的视图、在…

数据结构——基于字符串模式匹配算法的病毒感染检测

实验四 基于字符串模式匹配算法的病毒感染检测 【实验目的】 1.掌握字符串的顺序存储表示方法。 2.掌握字符串模式匹配BF算法和KMP算法的实现。 【实验内容】 问题描述 医学研究者最近发现了某些新病毒,通过对这些病毒的分析,得知它们的DNA序列都是环状的。现在研究者已收集了…

WPF 使用 Expression Design 画图导出及使用 Path 画图

WPF 使用 Expression Design 画图导出及使用 Path 画图目录WPF 使用 Expression Design 画图导出及使用 Path 画图一、软件介绍二、Microsoft Expression Design 使用三、微语言和 Path 绘图1、"注释" 图形(中括号)2、"并行模式" 图…

数据结构——模式匹配kmp算法

暴力算法 //暴力算法 int index(SString S,SString T,int pos) {int ipos,j1;while(i<S[0]&&j<T[0]){if(S[i]T[j]){i;j;}else {ii-j2;j1;}}if(j>T[0])return i-T[0];else return 0;} kmp算法 next[]数组的求法&#xff1a; 例子&#xff1a;abaabcac 模式串…

互联网时代供应链

供应链是指围绕核心企业&#xff0c;从配套零件开始&#xff0c;制成中间产品以及最终产品&#xff0c;最后由销售网络把产品送到消费者手中的、将供应商&#xff0c;制造商&#xff0c;分销商直到最终用户连成一个整体的功能网链结构。供应链管理的经营理念是从消费者的角度&a…