【图像处理】灰度图、亮度峰值极值查找

图像分割中,采用腐蚀、膨胀等形态学操作一般可以对图像进行一定效果的分割。腐蚀采用的kernel往往决定了分割的效果,核太小则难以分割开来,核太大则会将某些部分腐蚀掉同时对原本图像形状产生较大的影响。所以,换了一个思路想,从外边分割不如从里面扩张。所以分割问题的重点放在了图像质心的查找。

图像处理中,针对二值化分割图可以使用距离变幻得到一张灰度图,而亮度中心则是质心,查找质心既可以实现简单的分割。Matlab中查找局部峰值的函数有imregionalmax,而在python中模块skimage中有peak_local_max函数同样实现了对灰度图的峰值查找。但是,在C/C++中,笔者还没有找到相关的图像处理库有这一方面的功能,所以只能对着论文写了。

1、距离变换

距离变换在图像处理应用十分广泛,特别在图像分割方面。简单来说,距离变换是针对二值化图像,其实就是计算非零点到最近零点的距离。所以,图像经过距离变换后,分割图像中心则呈现出峰值。距离的定义一般有以下3种类型:

【图像处理】灰度图、亮度峰值极值查找

OpenCV中,则有7中类型的距离定义,除此之外用于还可以使用自己定义的距离。(所以,有无限制种吧)

/** Distance types for Distance Transform and M-estimators */ enum { CV_DIST_USER =-1, /**< User defined distance */ CV_DIST_L1 =1, /**< distance = |x1-x2| + |y1-y2| */ CV_DIST_L2 =2, /**< the simple euclidean distance */ CV_DIST_C =3, /**< distance = max(|x1-x2|,|y1-y2|) */ CV_DIST_L12 =4, /**< L1-L2 metric: distance = 2(sqrt(1+x*x/2) - 1)) */ CV_DIST_FAIR =5, /**< distance = c^2(|x|/c-log(1+|x|/c)), c = 1.3998 */ CV_DIST_WELSCH =6, /**< distance = c^2/2(1-exp(-(x/c)^2)), c = 2.9846 */ CV_DIST_HUBER =7 /**< distance = |x|<c ? x^2/2 : c(|x|-c/2), c=1.345 */ };

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwyypw.html