科 / 研 / 图 / 像 / 处 / 理
怎样 自动检测图片中的某些特征,例如圆、直线等,是图像处理中一类重要的问题。
在ImageJ中,把图像二值化,然后Analyze Particle,可以识别出不同的物体。如果物体是堆叠在一起的,可以通过Watershed分割开来。
但如果 圆形是堆叠在一起,或者圆形的边缘不完整,这种方法就无法很好地解决圆形检测的问题:
▲watershed不能很好应对圆形堆叠的情况
▲fill holes无法处理圆形边缘残缺的情况
针对这一问题,圆形霍夫变换 (circle Hough Transform) 可以用于检测不完美图像中的圆形:
https://en.wikipedia.org/wiki/Circle_Hough_Transform
circle Hough Transform的原理其实并不复杂,可以理解成:沿着图像边界(Edge)的每个pixel,画一个已知半径的圆:
每个圆经过的区域,都会在图像上加一,最后会形成一个霍夫参数空间的图像:
通过寻找局部最大值,就可以检测到特定圆的圆心坐标。
但这种方法 一次只能找到一种特定半径的圆,如果要找到左上角的那个小圆的坐标,就需要以更小的半径画圆。
ImageJ中有自动进行圆形检测的插件——circle Hough Transform:
这篇文章会介绍怎样用circle Hough Transform进行圆形检测。
一、插件安装
一、插件安装
1、打开更新页面(Help->Update...)
出现下面这个页面后,点击Manage update sites:
2、勾选UCB Vision Sciences
勾选UCB
Vision Sciences,然后点击Close。
3、安装插件
点击Apply changes。
重启ImageJ,即可在Plugins -> UCB Vision Sciences -› Hough Circle Transform里找到该插件。
二、插件使用
1、得到图像边界(Process -> Find Edge)
图像需要先转为8-bit的灰度图(如果原本是16-bit就不用转了)
2、二值化边界(Image -> Adjust - Threshold)
调整合适的Threshold后Apply,将图像转为二值化。
3、测量圆形半径的大致范围
画直线,测量最大、最小圆的直径,从而估算出图像中圆形大概的半径范围。这里测得最小半径为42左右,最大半径为79左右。单位都为pixel。
3、圆形检测(Plugins -> UCB Vision Sciences -> Hough Circle Transform)
打开Hough Circle Transform插件,这里只讲Easy Mode:
这里比较关键的参数为:
Minimum search radius: 最小半径
Maximum search radius: 最大半径
Hough score threshold: Threshold越小,检测到圆形阅读
上一步已经测得了大概的半径范围,设置完成后,点击OK后即可得到结果:
Results中可以得到每个圆的圆心以及实际半径。
这里需要注意,因为circle Hough Transform在检测圆形的时候,是通过在Hough space寻找score较大的点。Hough score threshold需要根据结果,进行调整:
Advanced Mode可以调整步长、circle数量以及转换分辨率等参数,如果图像比较大,圆比较多,可以通过调这些参数加快运行速度:
大家记得把 <科研图像处理> 设置为星标哦,避免错过精彩内容:
往期回顾
◆ 荧光强度测量