Roberts Edge 감지를 사용하여 이미지를 처리하려고합니다. 두 마스크를 이미지에 적용하고 정상적으로 컨볼 루션을 수행합니까? 그레이 스케일 이미지를 처리하도록 프로그래밍하려고 할 때 누군가 가이 가장자리 감지 방법을 사용하는 방법에 대한 분석을 제공 할 수 있습니까? 두 커널을 별도로 사용하여 이미지를 복잡하게 만들었지 만 이미지 찌그러짐은 올바르게 보입니다.
감사.
Roberts Edge 감지를 사용하여 이미지를 처리하려고합니다. 두 마스크를 이미지에 적용하고 정상적으로 컨볼 루션을 수행합니까? 그레이 스케일 이미지를 처리하도록 프로그래밍하려고 할 때 누군가 가이 가장자리 감지 방법을 사용하는 방법에 대한 분석을 제공 할 수 있습니까? 두 커널을 별도로 사용하여 이미지를 복잡하게 만들었지 만 이미지 찌그러짐은 올바르게 보입니다.
감사.
답변:
Robert 's Cross는 홀수 크기 (3x3 또는 5x5가 아닌 2x2)가 아니기 때문에 약간 까다 롭습니다. 패딩 된 3x3 컨볼 루션 마스크를 사용하여 numpy + scipy를 사용했습니다.
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
내 스크립트의 출력.