Máy dò Roberts Edge sử dụng như thế nào?


10

Tôi đang cố gắng sử dụng phát hiện cạnh Roberts để xử lý một hình ảnh. Tôi chỉ cần áp dụng cả hai mặt nạ cho hình ảnh và thực hiện tích chập như bình thường? Ai đó có thể cho tôi biết chi tiết về cách sử dụng phương pháp phát hiện cạnh này không, vì tôi đang cố gắng lập trình nó để xử lý hình ảnh thang độ xám. Tôi chia sẻ hình ảnh bằng cách sử dụng cả hai hạt riêng biệt nhưng hình ảnh trông có vẻ đúng.

Cảm ơn.

Câu trả lời:


10

Robert's Cross hơi rắc rối vì nó không phải là kích thước kỳ lạ (2x2 thay vì 3x3 hoặc 5x5). Tôi đã thực hiện bằng cách sử dụng numpy + scipy bằng mặt nạ chập 3x3 có đệ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 )

Từ mục Wikipedia trên Cross của Robert. http://en.wikipedia.org/wiki/Roberts_Cross

Hình ảnh từ Robert Cross Cross trên Wikipedia

Đầu ra của tập lệnh của tôi.

Đầu ra kịch bản của tôi


Bạn có bình phương mỗi giá trị pixel trong ảnh không?
adamjmarkham

Đúng. "Np.sqrt (np.sapes (ngang) + np.sapes (dọc))" cho độ lớn của vectơ giữa các hướng ngang, dọc.
David Poole

@DavidPoole wiki máy dò cạnh của Robert thật tuyệt vời - đơn giản, chính xác và mang tính minh họa. Làm thế nào / tại sao nó nhạy cảm với tiếng ồn VS các biện pháp gradient khác? Không phải chỉ có một thước đo độ dốc 'đúng' sao?
Spacey

Tôi đang cố gắng thực hiện chức năng này trong python (phiên bản Spyder) nhưng tôi gặp khó khăn trong việc hiểu các đối số cần có và làm thế nào để nuôi chúng? infilename và outfilename là gì? Cảm ơn Sam

infilename là hình ảnh thang độ xám (1 mặt phẳng). outfilename chỉ là một tập tin đầu ra mà tập lệnh sẽ ghi vào. Các hình ảnh đầu vào / đầu ra có thể là jpeg, png, tif, v.v., thư viện Hình ảnh (nay là Gối) sẽ diễn giải định dạng hình ảnh dựa trên phần mở rộng tập tin. Ví dụ: python3 rcross.py bike.jpg out.tif
David Poole
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.