Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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
Image processing 图像中像素的位置是否控制边缘检测? 参考安得烈NG的这段视频 _Image Processing_Convolution_Edge Detection - Fatal编程技术网

Image processing 图像中像素的位置是否控制边缘检测? 参考安得烈NG的这段视频

Image processing 图像中像素的位置是否控制边缘检测? 参考安得烈NG的这段视频 ,image-processing,convolution,edge-detection,Image Processing,Convolution,Edge Detection,从这段视频中,我得出结论,要检测图像中的垂直边缘,应该有一些较亮的区域,然后是从左侧开始的较暗区域,那么只有这个[[1,0,-1],[1,0,-1],[1,0,-1]]将用作垂直边缘检测器,否则不会 我的结论正确吗 及 反之亦然吗 如果您考虑过滤器: 1 0 -1 1 0 -1 1 0 -1 您将看到,它只是从每个位置左侧的像素中减去右侧的像素,即查找水平差异 因此,它能够找到从光到暗、从暗到光的转换,只是差异会以相反的符号(加号或减号)出现。因此,如果你从左边的明亮区域过渡到右边的较暗区域,

从这段视频中,我得出结论,要检测图像中的垂直边缘,应该有一些较亮的区域,然后是从左侧开始的较暗区域,那么只有这个[[1,0,-1],[1,0,-1],[1,0,-1]]将用作垂直边缘检测器,否则不会

我的结论正确吗

反之亦然吗


如果您考虑过滤器:

1 0 -1
1 0 -1
1 0 -1
您将看到,它只是从每个位置左侧的像素中减去右侧的像素,即查找水平差异

因此,它能够找到从光到暗、从暗到光的转换,只是差异会以相反的符号(加号或减号)出现。因此,如果你从左边的明亮区域过渡到右边的较暗区域,你将有一个大的数字(明亮)减去一个小的数字(黑暗),差值将为正。相反,如果从左侧的暗区域(小数字)过渡到右侧的亮区域(大数字),则会得到负差值

下面是一个示例,刚刚使用ImageMagick在终端中完成。从这个图像开始:

应用您所说的过滤器:

magick input.png -morphology convolve '3x3: 1,0,-1 1,0,-1 1,0,-1' result.png

你可以看到它只能找到从暗到亮的边缘

如果要检测从亮到暗以及从暗到亮的边缘,则需要:

  • 使用有符号的数字(与无符号相反),以便保留负数结果,或
  • 给你的卷积加上一个“偏差”
例如,如果您的数据是无符号8位的,您可以通过将所有当前值除以2并在卷积之前加127来添加50%的偏差

因此,应用偏移,您的过滤器现在可以找到暗到亮和亮到暗的边:

magick input.png -define convolve:scale='50%!' -bias 50% -morphology convolve '3x3: 1,0,-1 1,0,-1 1,0,-1' result.png


如果现在要检测从明暗过渡的水平边,请将过滤器旋转到以下位置:

-1 -1 -1
 0  0  0
 1  1  1
并适用于:

magick input.png -morphology convolve '3x3: -1,-1,-1 0,0,0 1,1,1' result.png

或者,如果要查找从暗到亮的水平边,请使用:

 1  1  1
 0  0  0
-1 -1 -1

magick input.png -morphology convolve '3x3: 1,1,1 0,0,0 -1,-1,-1' result.png

同样,但有一个偏差,我们可以一下子找到从亮到暗和从暗到光的过渡:

magick image.png -define convolve:scale='50%!' -bias 50% -morphology convolve '3x3: -1,-1,-1 0,0,0 1,1,1' result.png



Anthony Thyssen以一种非常平易近人的方式提供了比你所希望的更多关于卷积的优秀信息。

那么你是说[[-10-1]、-1,0,1]、-1,0,1]]也将充当垂直线检测器@马克·塞切尔诺!我回答中的过滤器检测垂直边,而不是水平边。将其旋转90度,以便从下面的像素中减去上面的像素以检测水平边缘。我的意思是让最上面一行
-1-1-1
中间一行全为零,最下面一行
1
。记住你需要穿过一条边来检测它。你不会通过沿着悬崖边缘行走来检测它,但是如果你沿着悬崖边缘行走,垂直于它,你很快就会发现它……那么这个内核[[1,1,1],[0,0,0],-1,-1,-1]]会检测到什么特性呢?如果你读了我答案的前两段,或者看了最后两个例子,应该很清楚。否则,ImageMagick是免费的,可用于macOS(brew安装ImageMagick)、Linux和Windows,因此请自己尝试。