我正在尝试使用Roberts边缘检测来处理图像。我是否只将两个蒙版都应用于图像并像往常一样执行卷积?当我尝试对其进行编程以处理灰度图像时,有人可以给我详细介绍如何使用这种边缘检测方法。我分别使用两个内核对图像进行了卷积处理,但是图像凹痕看起来正确。

谢谢。

#1 楼

Robert's Cross有点棘手,因为它不是奇数大小(2x2而不是3x3或5x5)。我已经使用numpy + scipy和3x3卷积蒙版完成了它。

import sys
import numpy as np
from scipy import ndimage
import Image

roberts_cross_v = np.array( [[ 0, 0, 0 ],
                             [ 0, 1, 0 ],
                             [ 0, 0,-1 ]] )

roberts_cross_h = np.array( [[ 0, 0, 0 ],
                             [ 0, 0, 1 ],
                             [ 0,-1, 0 ]] )
def load_image( infilename ) :
    img = Image.open( infilename )
    img.load() 
    # note signed integer
    return np.asarray( img, dtype="int32" )

def save_image( data, outfilename ) :
    img = Image.fromarray( np.asarray( np.clip(data,0,255), dtype="uint8"), "L" )
    img.save( outfilename )

def roberts_cross( infilename, outfilename ) :
    image = load_image( infilename )

    vertical = ndimage.convolve( image, roberts_cross_v )
    horizontal = ndimage.convolve( image, roberts_cross_h )

    output_image = np.sqrt( np.square(horizontal) + np.square(vertical))

    save_image( output_image, outfilename )

infilename = sys.argv[1]
outfilename = sys.argv[2]
roberts_cross( infilename, outfilename )


摘自Robert's Cross上的Wikipedia条目。 http://en.wikipedia.org/wiki/Roberts_Cross



我的脚本的输出。



评论


$ \ begingroup $
您是否对图像中的每个像素值求平方?
$ \ endgroup $
–adamjmarkham
2011年12月7日在20:28

$ \ begingroup $
是的。 “ np.sqrt(np.square(水平)+ np.square(垂直))”给出水平,垂直方向之间的矢量大小。
$ \ endgroup $
–大卫·普尔(David Poole)
2011-12-8 14:16

$ \ begingroup $
@DavidPoole Robert的边缘检测器Wiki非常棒-简单,明确和说明性。为什么/为什么对噪声和其他梯度测量敏感?难道只有一种“真实”的梯度测度吗?
$ \ endgroup $
–太空
2012年3月28日在21:22

$ \ begingroup $
我正在尝试在python(Spyder版本)中实现此功能,但是我无法理解它所需要的参数以及如何输入它们?什么是infilename和outfilename?谢谢山姆
$ \ endgroup $
–user19959
16 Mar 10 '16 at 2:17

$ \ begingroup $
infilename是灰度(1平面)图像。 outfilename只是脚本将写入的输出文件。输入/输出图像可以是jpeg,png,tif等,图像库(现在为Pillow)将基于文件扩展名解释图像格式。示例:python3 rcross.py bicycle.jpg out.tif
$ \ endgroup $
–大卫·普尔(David Poole)
16 Mar 10 '16 at 15:27