Roberts Edge Detector nasıl kullanılır?


10

Bir görüntüyü işlemek için Roberts kenar algılamayı kullanmaya çalışıyorum. Her iki maskeyi de görüntüye uyguluyor ve normal şekilde evrişim gerçekleştiriyor muyum? Birisi bana bir gri tonlama görüntüsünü işlemek için programlamaya çalışırken, bu kenar algılama yöntemini kullanma dökümünü verebilir. Görüntüyü her iki çekirdeği ayrı ayrı kullanarak kıvrıldım, ancak görüntü çentiği doğru görünüyor.

Teşekkürler.

Yanıtlar:


10

Robert's Cross biraz zor çünkü garip bir boyut değil (3x3 veya 5x5 yerine 2x2). Yastıklı 3x3 evrişim maskesi kullanarak numpy + scipy kullanarak yaptım.

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 Cross'taki Wikipedia girişinden. http://en.wikipedia.org/wiki/Roberts_Cross

Wikipedia'da Robert's Cross Entry'den görüntü

Senaryomun çıktısı.

Betik çıktım


Görüntüdeki her piksel değerinin karesini alıyor musunuz?
adamjmarkham

Evet. "Np.sqrt (np.square (yatay) + np.square (dikey))", yatay, dikey yönler arasındaki vektör büyüklüğünü verir.
David Poole

@DavidPoole Robert'in kenar dedektörü wiki harika - basit, noktaya ve açıklayıcı. Gürültüye karşı diğer gradyan ölçülerine nasıl / neden duyarlıdır? Sadece bir 'doğru' gradyan ölçüsü yok mu?
Spacey

Bu işlevi python (Spyder sürümü) uygulamaya çalışıyorum ama alır ve nasıl beslemek argümanları anlamakta sorun yaşıyorum? dosya adı ve dosya adı nedir? Teşekkürler Sam

infilename gri tonlamalı (1 düzlem) bir görüntüdür. outfilename sadece komut dosyasının yazacağı bir çıktı dosyasıdır. Giriş / çıkış görüntüleri jpeg, png, tif vb. Olabilir, Görüntü kitaplığı (şimdi Yastık) dosya formatına göre görüntü formatını yorumlayacaktır. Örnek: python3 rcross.py bicycle.jpg out.tif
David Poole
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.