罗伯茨边缘检测器如何使用?

信息处理 边缘检测 在家工作
2021-12-28 12:36:27

我正在尝试使用罗伯茨边缘检测来处理图像。我是否只是将两个蒙版应用于图像并正常执行卷积?有人可以告诉我如何使用这种边缘检测方法的细分,因为我正在尝试对其进行编程以处理灰度图像。我分别使用两个内核对图像进行了卷积,但图像凹痕看起来正确。

谢谢。

1个回答

罗伯特十字有点棘手,因为它不是一个奇怪的尺寸(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 )

来自罗伯特十字的维基百科条目。http://en.wikipedia.org/wiki/Roberts_Cross

图片来自 Wikipedia 上的 Robert's Cross Entry

我的脚本的输出。

我的脚本输出