রবার্ট ক্রস কিছুটা জটিল কারণ এটি কোনও বিজোড় আকার নয় (3x3 বা 5x5 এর চেয়ে 2x2)। আমি প্যাডেড 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
আমার স্ক্রিপ্ট এর আউটপুট।