ImageJ | 基于Hough Transform的圆形检测

文摘   科学   2024-10-16 08:30   上海  

科 / 研 / 图 / 像 / 处 / 理



怎样 自动检测图片中的某些特征,例如圆、直线等,是图像处理中一类重要的问题。


在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

调整合适的ThresholdApply,将图像转为二值化。



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数量以及转换分辨率等参数,如果图像比较大,圆比较多,可以通过调这些参数加快运行速度:



大家记得把 <科研图像处理> 设置为星标哦,避免错过精彩内容:



感谢关注和支持,我们下期见~ 

作者 | Treasure琛
排版 | 小乐喵喵   



往期回顾

◆ Western Blot 条带分析

◆ 荧光强度测量

◆ 比例尺的校准和添加

◆ 细胞分割神器Cellpose(自动计数篇)

◆ 基于ChatGPT快速编程

◆ ImageJ基础篇 | 成像注意事项

◆ 基于阈值分割的自动细胞计数

◆ OpenAI API的使用方法-附Python代码

◆ 利用Segment Anything进行细胞分割

◆ Python读取显微镜图像格式

◆ Python实现3D Slice Viewer

◆ 利用Track-Anything进行细胞追踪



科研图像处理
科研图像处理一站式解决方案,原知乎《ImageJ实用教程》
 最新文章