Roberts Edge Detector bagaimana cara menggunakan?

10

Saya mencoba menggunakan deteksi tepi Roberts untuk memproses gambar. Apakah saya hanya menerapkan kedua topeng pada gambar dan melakukan konvolusi seperti biasa? Bisakah seseorang memberi saya rincian tentang cara menggunakan metode deteksi tepi ini, karena saya mencoba memprogramnya untuk memproses gambar skala abu-abu. Saya berbelit-belit gambar menggunakan kedua kernel secara terpisah tetapi gambar penyok terlihat benar.

Terima kasih.

adamjmarkham
sumber

Jawaban:

10

Robert's Cross sedikit rumit karena ini bukan ukuran yang aneh (2x2 daripada 3x3 atau 5x5). Saya sudah melakukannya menggunakan numpy + scipy menggunakan topeng konvolusi 3x3 empuk.

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 )

Dari entri Wikipedia di Robert's Cross. http://en.wikipedia.org/wiki/Roberts_Cross

Gambar dari Robert's Cross Entry di Wikipedia

Keluaran skrip saya.

Keluaran skrip saya

David Poole
sumber
Apakah Anda menyamakan setiap nilai piksel dalam gambar?
adamjmarkham
Iya. "Np.sqrt (np.square (horizontal) + np.square (vertikal))" memberikan besaran vektor antara arah horisontal dan vertikal.
David Poole
@DavidPoole Wiki pendeteksi tepi Robert sangat fantastis - sederhana, to the point, dan ilustratif. Bagaimana / mengapa sensitif terhadap noise VS pengukuran gradien lainnya? Bukankah hanya ada satu ukuran gradien 'benar'?
Spacey
Saya mencoba menerapkan fungsi ini dalam python (versi Spyder) tetapi saya mengalami kesulitan memahami argumen yang diperlukan dan bagaimana cara memberi makan mereka? apa itu infilename dan outfilename? Terima kasih Sam
infilename adalah gambar grayscale (1 pesawat). nama file hanyalah file output yang akan dituliskan skrip. Gambar input / output dapat jpeg, png, tif, dll, perpustakaan gambar (sekarang bantal) akan menafsirkan format gambar berdasarkan ekstensi file. Contoh: python3 rcross.py bicycle.jpg out.tif
David Poole