Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 图像分割和图像识别-如何识别黑色背景图像中白色斑块的坐标?_Php_Image_Image Processing_Image Recognition_Image Segmentation - Fatal编程技术网

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

Php 图像分割和图像识别-如何识别黑色背景图像中白色斑块的坐标?,php,image,image-processing,image-recognition,image-segmentation,Php,Image,Image Processing,Image Recognition,Image Segmentation,目标:找到面积最大的白色斑块。如果可能,然后确认它是否是一个圆。然后找到此面片的平均中心和半径。 我曾想过在图像周围创建一个边缘,但我不知道这如何有助于找出补丁的区域 我正在努力做到这一点,如果有人能给我指引正确的方向,我将不胜感激 我目前正在使用php.gd库,这是我仅有的工具 感谢在图像中检测边缘实际上非常简单。最标准的方法是使用操作并选择正确的内核来扫描图像。php.gd中有一个函数,可以在其中指定输入图像、卷积核、除数和偏移量。除数只是将内核中的所有值除以该值,偏移量为内核中的每个值添加

目标:找到面积最大的白色斑块。如果可能,然后确认它是否是一个圆。然后找到此面片的平均中心和半径。

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

我正在努力做到这一点,如果有人能给我指引正确的方向,我将不胜感激

我目前正在使用php.gd库,这是我仅有的工具


感谢

在图像中检测边缘实际上非常简单。最标准的方法是使用操作并选择正确的内核来扫描图像。
php.gd
中有一个函数,可以在其中指定输入图像、卷积核、除数和偏移量。除数只是将内核中的所有值除以该值,偏移量为内核中的每个值添加一个值。因此,假设您的图像已加载到数组
$im
,您可以执行以下操作:

$edgeMatrix = array(-1,-1,-1,-1,8,-1,-1,-1,-1);
$divisor = 0;
$offset = 0;

imageconvolution($im, $edgeMatrix, $divisor, $offset);
imagefilter($im, IMG_FILTER_EDGEDETECT);
请注意,
imageconvolution
会对原始输入图像进行变异,因此
$im
将包含边缘检测结果。确保您在某处有原始图像的副本,以备需要

$edgeMatrix=数组(-1,-1,-1,8,-1,-1,-1,-1,-1)
是标准,经常用于边缘检测任务

但是,在有边缘检测标志的情况下,有一个函数被调用-
IMG\u FILTER\u EDGEDETECT
。此函数用于过滤给定多个选项之一的图像,而边缘检测是这些选项之一。因此,您可以这样做:

$edgeMatrix = array(-1,-1,-1,-1,8,-1,-1,-1,-1);
$divisor = 0;
$offset = 0;

imageconvolution($im, $edgeMatrix, $divisor, $offset);
imagefilter($im, IMG_FILTER_EDGEDETECT);
imageconvolution
一样,
imagefilter
也会改变输入图像,因此再次确保在需要时将原始图像保留在某个位置


希望其中一个对你有用

我没有PHP方面的经验,但确定领域非常简单。你所要做的就是计算每个对象有多少个白色像素。现在,要确定具有最大面积的对象是否为圆,您可以使用本文中的公式:-该公式说明易于为圆的对象的比率接近1,而非圆对象的比率则低得多。您可以设置一个阈值来确定形状是否为圆形。@rayryeng感谢您的解决方案。如何分别计算每个对象的面积?计算白色像素将得到所有对象的累积面积。我没有说一起计算所有对象的面积,而是单独计算每个对象的面积。gd只有非常基本的图像处理功能。您需要做的是执行一个连接的组件标签——这将为每个唯一的对象提供一个唯一的标签。从那里,您可以循环遍历所有唯一的标签并找到它们的总面积。我没有PHP方面的知识,所以我不知道有哪一个库可以用来实现这一点。。。。但希望您能找到一些处理连接组件和php.gd的东西。您知道如何在这些对象周围创建边吗。任何特定的算法?通过php.gd中的可用算法,您可以使用任何标准的梯度估计技术。查看php.gd中的
imageconvolution
方法:-使用此方法,它需要一个3 x 3卷积掩码。您可以尝试使用的3 x 3掩码是:
$edgeMatrix=array(1,1,1,1,-8,1,1,1,1)
。除数和偏移量都可以是0(
$divisior=0;$offset=0;
)。这是一个拉普拉斯掩模,同时也是一个边缘检测器。