ทางเลือกในการแปลงแบบ Hough สำหรับตรวจจับโครงสร้างแบบกริด


16

ฉันมีภาพที่ประกอบด้วย 'มุม' หลายอันซึ่งประกอบเป็นรูปร่างกริด:

ป้อนคำอธิบายรูปภาพที่นี่

หลังจากการค้นหาบางอย่างดูเหมือนว่า Hough จะเป็นแบบที่ดีเพราะมันไม่ได้มีปัญหากับการแบ่งเป็นแถว อย่างไรก็ตามปัญหาที่ฉันมีคือเส้นของฉัน 'อ้วน' และการตรวจจับขอบใด ๆ ที่ฉันเรียกใช้ (Canny ในกรณีนี้) เลือกขอบของเส้นไม่ใช่เส้นตรง:

ป้อนคำอธิบายรูปภาพที่นี่

ซึ่งหมายความว่าการแปลง Hough สิ้นสุดลงโดยเลือกหนึ่ง (หรือทั้งสองอย่าง) ของ 'ด้าน' ของเส้นกริดของฉันและไม่ใช่กึ่งกลาง

ป้อนคำอธิบายรูปภาพที่นี่

เนื่องจากฉันรู้ว่าสิ่งที่ฉันกำลังมองหา (รูปร่างคล้ายกริดนี้มักจะอยู่ในแนวเดียวกันเสมอ) มีวิธีที่ดีกว่าในการทำส่วน 'การตรวจจับขอบ' เพื่อให้เส้นกึ่งกลางหรือให้ฉันดู ที่วิธีการที่แตกต่างกันโดยสิ้นเชิง?


สำหรับบริบทกริดนี้จะถูกนำไปเปรียบเทียบกับกริดเล็กน้อยเพื่อทำการปรับเทียบกล้อง Tsai
เบญจพล

"การตรวจจับขอบที่ฉันรันเลือกขอบของเส้น" ใช่เพราะการตรวจจับขอบแปลงขอบเป็นสันและภาพของคุณ แล้วสันเขา ขอบเป็นขอบเขตระหว่างแสงกับความมืด
endolith

คำตอบ:


10

Hough Transform จะช่วยในการหยิบ Grid ขึ้นมาในกรณีนี้ หากต้องการ "เส้นบาง" คุณอาจต้องการพิจารณาการทำงานของSkeletonization

ที่จะสร้างภาพเช่นนี้: เอาท์พุท Skeletonization

เนื่องจากวิธีการทำงาน Skeletonization มันจะยังคงผลิตบางบรรทัดที่ดูเหมือนจะไม่เกี่ยวข้องกับกริด แต่เส้นเหล่านี้ไปสู่ทิศทาง "ผิดพลาด" ไม่มาก (อย่างน้อยในภาพที่กำหนด) เพื่อสร้างความสับสนตรวจจับเส้นของการแปลง Hough มากเกินไปและจะเลือกเส้นหลักสองชุดอย่างชัดเจนในทิศทางที่แตกต่างกัน (นี่คือลักษณะของเอาต์พุต HT:) ป้อนคำอธิบายรูปภาพที่นี่

หากคุณใช้ MATLAB คุณอาจต้องการตรวจสอบหน้าช่วยเหลือนี้


ขอบคุณ! สิ่งนี้ช่วยได้มาก ยังไม่ได้รับใบอนุญาต MATLAB ของฉัน แต่ฉันลองใช้งาน SimpleSkeletonization ของ AForge และใช้งานได้ดีกว่า ... แม้ว่าจะยังไม่สมบูรณ์แบบก็ตาม ฉันจะกลับมาทบทวนเรื่องนี้อีกครั้งเมื่อฉันได้รับข้อมูลจริงเพื่อทดสอบ
Benjol

คุณอาจต้องการลองใหม่อีกครั้งภาพต้นฉบับของคุณก่อนที่เกณฑ์บางอย่างที่ดูเหมือนว่าจะผลิตเส้นตารางไขมัน "ดีที่สุด" สิ่งที่ฉันหมายความว่าเหมาะสมที่สุดคือพวกมันเชื่อมต่อกันอย่างน้อย ที่สามารถปรับปรุงประสิทธิภาพของ Skeletonization แต่คุณจะมีพารามิเตอร์พิเศษเพื่อพิจารณา (ธรณีประตู) บางทีมันก็คุ้มค่าที่จะดูว่าจะปรับปรุงการได้มาของภาพด้วยเช่นกัน
A_A

ใช่อย่างที่ฉันพูดเมื่อฉันมีข้อมูลจริงที่จะเล่นมันจะคุ้มค่ากับเวลาของฉันในการปรับแต่งระบบ ข้อสงสัยที่สำคัญอย่างหนึ่งที่ฉันมีเกี่ยวกับ Hough โดยทั่วไปคือการแยกส่วนของทีต้าจะทำงานกับความแม่นยำของพิกเซลย่อยที่เราต้องการ (นั่นและฉันไม่มั่นใจอย่างสมบูรณ์ว่าความคลาดเคลื่อนของเลนส์จะไม่ได้หมายความว่าเส้นโค้งอาจไม่ตรง ... )
Benjol

11

ทางเลือกอื่นสำหรับ Hough Transform คือ Radon Transform ( 1 , 2 ) คำอธิบายคร่าวๆของอัลกอริทึมในการตรวจสอบโครงสร้างคล้ายกริดอาจมีลักษณะเช่นนี้:

1. Perform Radon Transform from 0 to 180 degrees.
2. Find the two highest maxima in the angle bins.
3. For the two angles with maximal amplitude find the local maxima within the bin.
4. You can use the constraint that the maxima should have even spacing to deal with outliers.

แก้ไข :

นี่เป็นตัวอย่าง MATLAB ขนาดเล็กเพื่อแสดงขั้นตอนที่ 1-3:

im = imread('grid.png');
[R, xp] = radon(im, 0:180);
imagesc(0:180, xp, R)

ผลลัพธ์ของการแปลงเรดอน

plot(max(R)) % the two maxima are at 65 & 117 degrees

Maxima เหนือทุกมุม

plot(R(:, 65))

Maxima ที่ 65 องศา

plot(R(:,117))

Maxima ที่ 117 องศา

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


ขอบคุณคุณช่วยบอกฉันสักสองสามคำได้ประโยชน์อะไรที่คุณคาดว่า Radon Transform จะให้ฉันเทียบกับ Hough Transform?
Benjol

@benjol ฉันได้อัพเดตคำตอบของฉัน
bjoernz

ดีมากขอบคุณมาก เมื่อไอทีให้ฉันเข้าถึง Matlab ฉันจะลองดูสิ!
Benjol

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.