การตรวจจับพื้นผิว


9

ส่วนหนึ่งของพื้นที่ขนาดใหญ่ของสีเทา (ตั้งแต่สีขาวเป็นสีดำ) จากภาพเป็นอย่างไร (ถ้าคุณรู้สิ่งนี้ใน opencv คุณอาจตอบโดยพูดว่าคุณจะทำอะไรใน opencv) ตัวอย่างเช่นให้ภาพนี้:

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

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

ขอบคุณล่วงหน้า


ฉันเห็นพื้นที่สีเทาหลายแห่งสามารถแยกแยะได้ชัดเจน คุณสามารถแสดงผลลัพธ์ที่คุณต้องการได้ไหม?
ดร. เบลิซาเรียส

ผลลัพธ์ที่ฉันต้องการคือพิกัดของมุมบนขวาและซ้ายและพิกัดของมุมล่างซ้ายของสี่เหลี่ยมสีเทากลาง
Olivier_s_j

คุณช่วยบอกอะไรเราเกี่ยวกับสภาพแวดล้อมและความแปรปรวนที่อาจเกิดขึ้นในภาพที่คุณต้องใช้ในการประมวลผลได้หรือไม่? เป้าหมายจะอยู่ใกล้กลางภาพเสมอหรือไม่ จะมีสี่เหลี่ยมสีเทาอื่น ๆ ปรากฏอยู่หรือไม่อาจมีขนาดเท่ากันหรือไม่ เกิดอะไรขึ้นถ้าพวกเขาปรากฏเป็นสีเทาเหมือนกัน มีสิ่งอื่นใดอีกที่เราสามารถใช้ระบุมันได้หรือไม่? มันจะมีรูปร่าง "T" ขนาดเล็กอยู่เสมอหรือไม่?
justis

สวัสดีเป้าหมายไม่เคยอยู่ใกล้กลางภาพเสมอ เป้าหมายจะเป็นรูปสี่เหลี่ยมผืนผ้าเสมอ (มันอาจเป็นแค่กำแพงก็ได้) หากมีหลายรูปสี่เหลี่ยมผืนผ้าก็ควรตรวจพบ แต่ควรมีขนาดใหญ่ สามารถทิ้งพื้นที่ขนาดเล็กได้ หากพวกเขาทั้งหมดปรากฏเป็นสีเทาแบบเดียวกันพวกเขาควรจะถูกตรวจพบ แต่โอกาสที่จะเกิดขึ้นนั้นน้อยมาก คุณสมบัติจริงเท่านั้นที่สามารถตรวจพบได้คือพื้นผิวจะมีสีเทาเหมือนกัน (มากหรือน้อยกว่า) ทั่วทั้งพื้นผิวและเป็นรูปสี่เหลี่ยมผืนผ้า มีนิสัยเป็นขนาดเล็กรูปร่าง T บนทุกเวลา
Olivier_s_j

คำตอบ:


9

คุณจะได้รับการแบ่งส่วนที่เหมาะสมของพื้นที่สีเทาโดยใช้Watershed Algorithmหรือการตัดกราฟ ลุ่มน้ำมีอยู่ใน opencv แต่ยังไม่มีการตัดกราฟ (BTW นี่คือแผนที่ความลึกจาก Kinect หรือไม่?)


1
ฟังก์ชั่นลุ่มน้ำใน opencv จำเป็นต้องใช้ภาพ 8 บิต 3 ช่องเป็นอินพุต แผนที่ความลึกของฉันคือภาพ 8 บิต 1 ความคิดวิธีการแก้ปัญหานี้?
Olivier_s_j

/ * รับคุณสมบัติภาพ/ width = src-> width; height = src-> height; /สร้างภาพใหม่สำหรับรุ่นสีเทา * / IplImage * dst = cvCreateImage (cvSize (ความกว้างความสูง), IPL_DEPTH_8U, 1); cvCvtColor (src, dst, CV_RGB2GRAY);
nav

คำถามอื่นฉันเพิ่งได้ฟังก์ชั่นลุ่มน้ำที่ทำงานในภาพอื่น (เพียงตัวอย่างจาก opencv) แต่พวกเขาเริ่มด้วยภาพสีและภาพไบนารี ฉันมีเพียง 1 ภาพเท่านั้น ... ภาพ grascale มีความคิดว่าหน้ากากควรเป็นอย่างไร (ตัวแปรอินพุตตัวที่สอง)?
Olivier_s_j

4

ใน Mathematica คุณสามารถทำสิ่งที่ชอบ:

Colorize[MorphologicalComponents[
  ColorNegate@
   Erosion[Dilation[
     DeleteSmallComponents[
      Erosion[Binarize[
        GradientFilter[
         ColorConvert[Import@"http://i.stack.imgur.com/XdnaW.png", 
          "RGB"], 2], .015], 1], 100], 2], 2]], 
 ColorFunction -> "ThermometerColors"]

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

อาจคุณสามารถแปลรหัสนี้เป็น lib การประมวลผลภาพใด ๆ


สวัสดีดูดี แต่ฉันไม่มีวิชาคณิตศาสตร์ แต่ฉันเดาว่าคุณใช้การกำหนดเกณฑ์ขั้นสูงใหม่ตามระดับสีเทาของภาพนี้หรือไม่? บางทีคุณอาจให้ข้อมูลเล็กน้อยกับรหัสของคุณ ขอบคุณ
Olivier_s_j

1
@Ojt สำหรับแต่ละคำสั่งคุณสามารถอ่าน " reference.wolfram.com/mathematica/ref/xxx.html " สำหรับคำอธิบาย ตัวอย่างเช่นreference.wolfram.com/mathematica/ref/…
ดร. เบลิซาเรียส

ตกลงฉันทำตามที่คุณแนะนำ แต่ดูเหมือนว่าคุณกำลังใช้ Binarize เพื่อกำหนดค่าที่กำหนด ซึ่งเป็นไปไม่ได้ในกรณีของฉัน เนื่องจากพื้นที่ขนาดใหญ่สามารถมีเฉดสีเทาที่แตกต่างกัน (ตัวอย่างเช่นพื้นผิวกลางอาจเป็นสีอ่อนมาก) แล้วเกณฑ์จะไม่ทำงาน
Olivier_s_j
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.