图像分割和图像识别 - 如何识别黑色背景图像中白色块的坐标?

Image segmentation and Image Recognition - How to recognise the coordinates of a white patch in a black background image?

目的:找到面积最大的白色块。如果可能,请确认它是否是一个圆圈。然后找到这个补丁的平均中心和半径。

我想过在图像周围创建一个边缘,但我不知道这将如何帮助找出补丁的区域。

我正在努力完成这个,如果有人能指导我正确的方向,我将不胜感激。

我目前正在使用 php.gd 库,这是我唯一的工具。

谢谢

检测图像的边缘其实很简单。最标准的方法是使用 image convolution operation and choosing the right kernel to sweep over your image. There is a function in php.gd called 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 也会改变输入图像,因此再次确保在需要时将原始图像保存在某个地方。

希望其中之一对您有用!