怎么建设微信网站,佛山h5网站公司,烟台网站建设找三硕科技,php网站开发说明文档灰度直方图 横坐标#xff1a;是 0~255 表示灰度值的范围
纵坐标#xff1a;是在不同灰度值下像素的个数#xff01; 那么灰度直方图的本质就是统计不同灰度下像素的个数#xff01; 它的直观目的#xff0c;就是查看灰度的分布情况#xff01; 与之相关的函数#xff…灰度直方图 横坐标是 0~255 表示灰度值的范围
纵坐标是在不同灰度值下像素的个数 那么灰度直方图的本质就是统计不同灰度下像素的个数 它的直观目的就是查看灰度的分布情况 与之相关的函数
全局的阈值分割 threshold
threshold (ImageChannel3, Regions, 248, 255)
选择一个灰度范围分割出在次范围中的像素。 binary_threshold
binary_threshold (ImageChannel3, Region, max_separability, dark, UsedThreshold) 如果你的背景和产品是很分明的各自的灰度都有一个峰值如上图
这个函数会自动生产一个灰度值可以很好的区分产品和背景。
max_separability 是一个算法的选择
dark 表示你想要的是比较暗的那个部分
UsedThreshold就是根据算法自动算出的灰度值 mean_image
mean_image (Image, ImageMean, 13, 13)
字面意思就是求图像的平均。专业的说法就是 【大名鼎鼎的】 均值滤波。 第一个参数是原始的图片第二个参数是滤波后的图片最后两个参数表示卷积核的大小也就是平均的一个范围的大小 具体的算法过程就是一个卷积核就像一个网格罩子每次从原图取出 如13*13个像素通过周围的像素算出一个平均值给中心的像素。卷积核会从头到尾扫描整幅图片。图片边缘处更具卷积核大小通过镜像将像素点补齐 那这样得出的图片的每个像素点的值都是它原本图片的周围像素点的平均值 我们来看看均值滤波的效果
原图均值滤波后均值滤波后给人的第一感觉就是图片变模糊了轮廓处没有那么分明了
“ 那个这个均值滤波感觉没啥作用啊”我一度这么认为。 但其实我们对对图片做某种滤波操作是有的时候并不是为了宏观上的图片展示效果而是微观上每个像素的值 比如均值滤波得到每个像素值后再结合另个一个算子dyn_threshold达到目的 dyn_threshold
dyn_threshold算子字面意思就是 动态阈值又称 局部阈值。比全局阈值 threshold 多了一个前缀 dyn_ 。不管是动态阈值还是全局阈值他们的目的都是 为了 做图片分割把我们感兴趣的部分挑出来。动态阈值 的优势在于在光照不均匀的情况下做分割
我们来看看这张图片 很明显的光照不均匀左边的偏暗右边的偏亮就是说产品是一个整体是我们感兴趣的地方需要将其分割出来但是产品的左边变暗右边偏亮如果用全局阈值那边我们很难将产品从图片中分割出来。全局分割效果如下 动态阈值局部阈值就能解决这个问题它的思路是将某个像素和周围的像素做对比如果比 周围像素的平均值 高出某个值 就会被分割出来。这就体现了局部的特点。从而避开了光照不均的问题。
那现在的问题是 周围像素的平均值 哪里来没错就是 mean_image。
mean_image 和 dyn_threshold 一般是联合使用的。
首先对图片做一个均值滤波mean_image 然后通过动态阈值dyn_threshold 将原图的每个像素点 和 均值后的图片的每个像素点 进行对比分割出高出平均值一定值的像素点。
mean_image (Image, ImageMean, 27, 27)
dyn_threshold (Image, ImageMean, RegionDynThresh, 5, light) dyn_threshold 参数解释
第四个参数5 的意思 就是 如果比 平均值高出5那么这个像素就是我们想要的。
反之如果一个黑色的像素值为1周围也都是值为1的黑色那么平均出来的值肯定也是1这样的像素点就会被剔除。
所以动态阈值的核心思想找和周围像素差值比较大的像素点。从而解决光线不均的问题。 mean_image 卷积核大小的选择
卷积核越大平均的范围就越大也就是这个“局部”越大如果我们把卷积核设置的比较小看看会有什么情况 有的产品边缘提取出来是空心的这是因为产品边缘线中间的区域像素差不多在加上平均的局部区域比较小那么中间的像素和平均像素就会相差无几所以不会被选中。
这时我们就需要增加卷积核的大小卷积核的大小得比你想选中得边缘要大这样求出均值就会更低这样就不会出现空心的问题。 例子参考
动态阈值还有一个小例子供大家参考
【halcon】例子分析之动态阈值_code bean的博客-CSDN博客之前的【halcon】系列文章中有介绍全局阈值的方法threshold。但是当我们的图片的背景光线不均匀时我们就需要动态阈值的方式及不同的明度区域使用不同的阈值。如这张图就是明暗不均我们没有办法使用全局的阈值挑选出全部的“棋子”动态阈值时根据周围的环境进行对比的使用我们先需要做一个均值滤波做了这个均值滤波之后得到了一个“明暗的背景”它并不是最终的结果而是一个动态阈值的参考对象。使用 light表示和平均值相比offset15更亮的部分。使用 dark表示和平均https://blog.csdn.net/songhuangong123/article/details/125152743#:~:text%E5%8F%91%E5%B8%83-,%E3%80%90halcon%E3%80%91%E4%BE%8B%E5%AD%90%E5%88%86%E6%9E%90%E4%B9%8B%E5%8A%A8%E6%80%81%E9%98%88%E5%80%BC,-code%20bean 小结
这篇文章由灰度直方图引出了三个常用的用于分割的函数 threshold 全局阈值分割 binary_threshold dyn_threshold 动态阈值分割 mean_image 均值滤波。
更多的分割算子可以到halcon的实例代码中的Segmentation分区中去寻找