【发布时间】:2015-04-08 22:50:30
【问题描述】:
目标:找到面积最大的白块。如果可能的话,然后确认它是否是一个圆圈。然后求这个patch的平均中心和半径。
我曾想过在图像周围创建一个边缘,但我不知道这将如何帮助找出补丁的区域。
我正在努力做到这一点,如果有人能指导我朝着正确的方向前进,我将不胜感激。
我目前正在使用 php.gd 库,这是我拥有的唯一工具。
谢谢
【问题讨论】:
-
我没有PHP经验,但是确定区域很简单。您所要做的就是计算每个对象有多少个白色像素。现在,要确定面积最大的对象是否是圆形,您可以使用这篇文章中的公式:stackoverflow.com/questions/24802059/removing-square-objects - 该公式表明,易于圆形的对象的比率接近 1,而非圆形物体的比例要低得多。您可以设置一个阈值来确定形状是否为圆形。
-
@rayryeng 感谢您的解决方案。你如何分别计算每个物体的面积?计算白色像素将为所有对象提供累积面积。
-
我没有说要一起计算所有对象的面积——你单独计算每个对象的面积。 php.gd 只有非常基本的图像处理东西。您需要做的是执行连接组件标记 - homepages.inf.ed.ac.uk/rbf/HIPR2/label.htm - 这为每个唯一对象提供唯一标签。从那里,您可以遍历所有独特的标签并找到它们的总面积。我对 PHP 一无所知,所以我不知道你可以用什么库来做到这一点......但希望你能找到一些处理连接组件和 php.gd 的东西。
-
我想我已经找到了办法。你知道我怎样才能在这些对象周围创建一个边缘。有什么特别的算法吗?
-
有了 php.gd 中可用的内容,您可以使用任何标准的梯度估计技术。看看 php.gd 中的
imageconvolution方法:php.net/manual/en/function.imageconvolution.php - 使用这种方法,它需要一个 3 x 3 的卷积掩码。您可以尝试使用的 3 x 3 掩码是:$edgeMatrix = array(1,1,1,1,-8,1,1,1,1)。除数和偏移量都可以为 0 ($divisor = 0; $offset = 0;)。这是一个拉普拉斯掩码,也可以兼作边缘检测器。
标签: php image image-processing image-recognition image-segmentation