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.

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.