您的任务是编写一个获取输入图像的程序,并通过边缘检测将其运行以成为输出图像。
边缘检测的工作原理如下(如果不清楚,请参阅sobel边缘检测):
- 像素的值是像素的总亮度,因此,如果它是彩色的,则需要先将其转换为灰度(为使操作简单且易于打高尔夫球,可以取R,G和B)。
- 像素p (i,j)的 G x和G y的公式为:
- G x = -1 * p (i-1,j-1) -2 * p (i-1,j) -1 * p (i-1,j + 1) + 1 * p (i + 1,j -1) + 2 * p (i + 1,j) + 1 * p (i + 1,j + 1)
- G y = -1 * p (i-1,j-1) -2 * p (i,j-1) -1 * p (i + 1,j-1) + 1 * p (i-1,j +1) + 2 * p (i,j + 1) + 1 * p (i + 1,j + 1)
- 那么,该像素处的边缘大小的值为:√(G x 2 + G y 2)
对于每个像素,输出图像的大小为边缘√(G x 2 + G y 2)的灰度。
奖金:
- 在边缘检测开始之前,请执行高斯模糊处理以平滑图像,以忽略任何较小的边缘。这样可以为最终结果带来-30%的奖金。
- 考虑到边缘的角度。通过使用相同的灰度值并使用从公式arctan(G y / G x)获得的角度从色轮添加颜色,可以为输出像素提供某种颜色。这将为最终结果带来-30%的额外奖金。
规则:
- 您可以省略边缘像素的值,并将其设置为黑色,或者可以将0用于图像外部的任何像素。
- 输出图像必须采用可在大多数计算机上打开的图像格式。
- 输出必须写入磁盘或可通过管道传输到文件。
- 输入是作为命令行参数提供的,形式为图像的相对路径,或者从命令行通过管道输入。
- 这是代码高尔夫,所以最短的代码以字节为单位!
您能准确指定高斯模糊吗?输入灰度是否也是如此?如果没有,我们应该如何将此边缘检测应用于彩色图像?输出图像的大小与输入的大小完全相同,但是输入仅在内部像素上执行(不是我们设置为零的像素)是否正确?
—
瑕疵的
您是否看过Computerphile有关边缘检测的视频?我能闻到那里的连接
—
感
@flawr我必须测试哪种高斯模糊对边缘检测有好处,所以我真的不知道什么是好的值。更多关于高斯模糊的信息。输入图像为彩色,如果要执行边缘检测,则需要先将其转换为灰度。边缘检测要么在内部像素上执行A :,然后将输出图像的外部1px边框设置为黑色,要么在所有像素上执行B :,并且将0用作图像外部任何像素的值。
—
vrwim 2015年
@GiantTree nooooooo视频是完全不相关的:)
—
vrwim
为什么这被否决?这似乎是一个完全正确的问题。
—
Addison Crump 2015年