Робертс Edge Detector, как использовать?

10

Я пытаюсь использовать обнаружение края Робертса для обработки изображения. Я просто применяю обе маски к изображению и выполняю свертку как обычно? Может ли кто-нибудь дать мне подробное описание того, как использовать этот метод обнаружения краев, поскольку я пытаюсь запрограммировать его для обработки изображения в градациях серого. Я свернул изображение, используя оба ядра по отдельности, но изображение не выглядело правильно.

Спасибо.

adamjmarkham
источник

Ответы:

10

Роберт Кросс немного хитрый, потому что это не странный размер (2х2, а не 3х3 или 5х5). Я сделал это, используя numpy + scipy, используя сверточную маску 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

Изображение из Робертс Кросс Вступление в Википедии

Вывод моего скрипта.

Мой скрипт вывода

Дэвид Пул
источник
Вы квадрат каждого значения пикселя в изображении?
adamjmarkham
Да. «Np.sqrt (np.square (горизонтальный) + np.square (вертикальный))» дает векторную величину между горизонтальным и вертикальным направлениями.
Дэвид Пул
@DavidPoole Вики детектора краев Роберта фантастичны - просты, точны и иллюстративны. Как / почему он чувствителен к шуму и другим градиентам? Есть ли только одна «истинная» мера градиента?
Спейси
Я пытаюсь реализовать эту функцию в Python (версия Spyder), но у меня возникают проблемы с пониманием аргументов, которые он принимает, и как их кормить? что такое infilename и outfilename? Спасибо Сэм
infilename - изображение в градациях серого (1 плоскость). outfilename - это просто выходной файл, в который скрипт будет писать. Изображения ввода / вывода могут быть в формате jpeg, png, tif и т. Д. Библиотека изображений (теперь подушка) будет интерпретировать формат изображения на основе расширения файла. Пример: python3 rcross.py bicycle.jpg out.tif
Дэвид Пул