เครื่องตรวจจับขอบ Roberts ใช้อย่างไร?


10

ฉันกำลังพยายามใช้การตรวจจับขอบ Roberts เพื่อประมวลผลภาพ ฉันเพิ่งใช้มาสก์ทั้งสองกับภาพและทำการบิดตามปกติหรือไม่ มีคนให้รายละเอียดของวิธีการใช้วิธีการตรวจจับขอบนี้ให้ฉันได้หรือไม่เพราะฉันพยายามตั้งโปรแกรมให้ประมวลผลภาพสีเทา ฉันปรับภาพให้ซับซ้อนโดยใช้ทั้งสองเมล็ดแยกกัน

ขอบคุณ

คำตอบ:


10

Robert's Cross เป็นเรื่องยุ่งยากเล็กน้อยเพราะมันไม่ใช่ขนาดที่แปลก (2x2 มากกว่า 3x3 หรือ 5x5) ฉันทำเสร็จแล้วโดยใช้ 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 )

จากรายการ Wikipedia บน Robert's Cross http://en.wikipedia.org/wiki/Roberts_Cross

ภาพจาก Cross's Robert ในวิกิพีเดีย

ผลลัพธ์ของสคริปต์ของฉัน

เอาต์พุตสคริปต์ของฉัน


คุณกำหนดค่าทุกพิกเซลของภาพในสี่เหลี่ยมหรือไม่?
adamjmarkham

ใช่. "np.sqrt (np.square (แนวนอน) + np.square (แนวตั้ง))" ให้ขนาดเวกเตอร์ระหว่างทิศทางแนวนอนและแนวตั้ง
David Poole

@DavidPoole เครื่องมือตรวจจับขอบของ Robert นั้นยอดเยี่ยม - ง่ายตรงประเด็นและเป็นตัวอย่าง มันไวต่อเสียง VS เทียบกับการไล่ระดับสีอื่น ๆ ได้อย่างไร? การไล่ระดับสี 'จริง' มีเพียงหนึ่งเดียวใช่ไหม?
Spacey

ฉันพยายามที่จะใช้ฟังก์ชั่นนี้ใน python (เวอร์ชั่น Spyder) แต่ฉันมีปัญหาในการทำความเข้าใจกับข้อโต้แย้งที่เกิดขึ้นและวิธีการป้อนมัน? infilename และ outfilename คืออะไร ขอบคุณ Sam

infilename เป็นรูปภาพระดับสีเทา (1 เครื่องบิน) outfilename เป็นเพียงไฟล์เอาต์พุตที่สคริปต์จะเขียน อิมเมจอินพุต / เอาต์พุตสามารถเป็น jpeg, png, tif, อื่น ๆ , ไลบรารีรูปภาพ (ตอนนี้เป็นหมอน) จะตีความรูปแบบรูปภาพตามนามสกุลไฟล์ ตัวอย่าง: python3 rcross.py bicycle.jpg out.tif
David Poole
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.