Roberts Edge Detector як користуватися?


10

Я намагаюся використовувати виявлення краю Робертса для обробки зображення. Чи просто я застосовую обидві маски до зображення і виконую згортання як звичайне? Чи міг би хтось мені розказати про те, як використовувати цей метод виявлення ребер, оскільки я намагаюся запрограмувати його для обробки зображення сірого масштабу. Я перекручував зображення, використовуючи обидва ядра окремо, але зображення вм'ятина виглядає правильно.

Дякую.

Відповіді:


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 - зображення в градаціях сірого (1 площина). outfilename - це лише вихідний файл, до якого буде писати сценарій. Вхідні / вихідні зображення можуть бути jpeg, png, tif тощо, бібліотека зображень (тепер Подушка) інтерпретує формат зображення на основі розширення файлу. Приклад: python3 rcross.py bicycle.jpg out.tif
Девід Пул
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.