กำลังเดินสแควร์: การค้นหาหลาย contours ภายในเขตข้อมูลเดียว?


9

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

อัลกอริทึมโดยทั่วไปค้นหาทุกบรรทัดในรูปภาพเริ่มจากด้านบนซ้ายของมันจนกว่าจะพบพิกเซลที่เป็นเส้นขอบ ใน pseudo-C ++:

int start = 0;
for(int i=0; i<amount_of_pixels; ++i)
{
   if(pixels[i] == border)
   {
      start = i;
      break;
   }
} 

เมื่อพบสิ่งใดสิ่งหนึ่งมันจะเริ่มต้นอัลกอริธึมกำลังเดินยกกำลังสองและค้นหารูปร่างของวัตถุที่เป็นของพิกเซล

สมมติว่าฉันมีสิ่งนี้:

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

ที่ทุกอย่างยกเว้นสีขาวเป็นเส้นขอบ

และได้พบคะแนนรูปร่างของหยดแรก:

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

สำหรับอัลกอริทึมทั่วไปมันจบแล้ว พบรูปร่างและทำงานของมันเสร็จแล้ว ฉันจะไปยังสอง blobs ต่อไปเพื่อหารูปทรงได้อย่างไร


ต้องการความช่วยเหลือในเรื่องนี้โปรดดูในstackoverflow.com/questions/17232672/

คำตอบ:


7

คุณสามารถลบรูปหลายเหลี่ยมที่พบได้โดยการวาดเป็นสีพื้นหลังแล้วทำซ้ำจนกว่าจะไม่มีอะไรเหลืออยู่?


1
นั่นเป็นวิธีที่ควรทำ เติมองค์ประกอบที่ค้นพบด้วยพื้นหลัง (หรือสีอื่น) และดำเนินการค้นหาต่อ (คุณสามารถดำเนินการต่อที่จุดที่คุณเจอ "คู่แรก")
bummzack

โอ้ว้าว. ฉันไม่รู้ด้วยซ้ำเกี่ยวกับการเติมน้ำท่วม ขอบคุณ
TravisG


1

ทำไมไม่บันทึกข้อมูลหยดลงในอาร์เรย์อื่นและตรวจสอบว่าพิกเซลที่ค้นพบใหม่นั้นอยู่ในกล่องที่มีขอบเขตของหยดก่อนหน้าหรือไม่ การจัดการเพิ่มเติมบางอย่างจะต้องจัดการกับ blobs ด้านล่าง centriod ของ blob ก่อนหน้าและที่อยู่ภายในกล่อง bounding

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