目标:找到面积最大的白色补丁。如果可能的话,确认它是否是一个圆圈。然后找到此贴片的平均中心和半径。
我想过在图像周围创建一个边缘,但我不知道这有助于找出补丁的区域。
我正在努力实现这个目标,如果有人能指导我朝着正确的方向前进,我会非常感激。
我目前正在使用php.gd库,这是我唯一拥有的工具。
由于
答案 0 :(得分:2)
检测图像中的边缘实际上非常简单。最标准的方法是使用image convolution操作并选择正确的内核来扫描图像。 php.gd
中有一个名为imageconvolution
的函数,您可以在其中指定输入图像,卷积内核,除数和偏移量。除数只是简单地将内核中的所有值除以该值,并且偏移量为内核中的每个值添加一个值。因此,假设您的图像已加载到数组$im
中,您可以这样做:
$edgeMatrix = array(-1,-1,-1,-1,8,-1,-1,-1,-1);
$divisor = 0;
$offset = 0;
imageconvolution($im, $edgeMatrix, $divisor, $offset);
请注意imageconvolution
会改变原始输入图像,因此$im
将包含边缘检测结果。确保您有原始图像的副本,以备不时之需。
$edgeMatrix = array(-1,-1,-1,-1,8,-1,-1,-1,-1);
是标准Laplacian convolution matrix,经常用于边缘检测任务。
但是,有一个名为imagefilter
的函数,其中有一个边缘检测标志 - IMG_FILTER_EDGEDETECT
。此功能可根据多个选项之一过滤图像,边缘检测是这些选项之一。因此,你会这样做:
imagefilter($im, IMG_FILTER_EDGEDETECT);
与imageconvolution
一样,imagefilter
也会改变输入图像,因此如果需要,请再次确保将原始图像保留在某处。
希望其中一个适合你!