คุณจะทำการจำแนกภาพสีได้อย่างไร?


14

เพื่อนของฉันมีภาพสีด้วยลายมือจีน (โดยทั่วไปแล้วถ่ายภาพหรือสแกนสิ่งที่เขาเขียนบนกระดาษสีขาว) และเขาต้องการให้ฉันแปลงเป็นภาพไบนารีขาวดำ มีแอปพลิเคชั่นภายใต้ Ubuntu ที่สามารถทำสิ่งนั้นได้หรือไม่

นี่คือภาพตัวอย่าง:

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


คำตอบ:


27

สิ่งที่คุณต้องการเรียกว่า "เกณฑ์" ในการประมวลผลภาพ โดยทั่วไปจะใช้รูปภาพเป็นอินพุตและเอาต์พุตรูปภาพที่มีพิกเซลทั้งหมดที่มีค่าต่ำกว่าขีด จำกัด ที่กำหนดเป็นสีดำและพิกเซลทั้งหมดเป็นค่าที่สูงกว่าขีด จำกัด ที่ตั้งเป็นสีขาว ซึ่งส่งผลให้ภาพขาวดำจากภาพอินพุตโดยพลการ

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

คุณสามารถใช้เครื่องมือกราฟิกเช่น GIMP เพื่อทำสิ่งนี้แบบโต้ตอบ (คุณจะพบเครื่องมือผ่านเมนูหลัก -> Colours -> Threshold) หรือคุณสามารถใช้ ImageMagick ดังนี้:

convert colored.png -threshold 75% thres_colored.png

การรันคำสั่งด้านบนของภาพตัวอย่างจะให้ผลลัพธ์ที่แสดงด้านล่าง

รูปภาพของรุ่น OP สีดำและสีขาว

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


2
ขอบคุณ! เนื่องจากภาพสีมี RBG สามแชนเนลเกณฑ์ / สามารถใช้กับอะไรโดยทั่วไป
ทิม

@Tim อาจขึ้นอยู่กับซอฟต์แวร์ แต่ฉันคาดหวังว่าจะมีขีด จำกัด (เว้นแต่คุณจะระบุต่อช่องสัญญาณหรือสำหรับช่องสัญญาณที่เฉพาะเจาะจงให้ดูเช่น-channelตัวเลือกการแปลงของ ImageMagick ) เพื่อนำไปใช้กับ "ค่า" ของพิกเซลซึ่งคำนวณ จากทุกช่อง นั่นคือเหตุผลที่ฉันบอกว่าคุณอาจต้องการแปลงเป็นโทนสีเทาก่อนเพื่อให้ได้ผลลัพธ์ที่คาดการณ์ได้มากขึ้น (โปรดดูการแก้ไขของฉันด้วย)
CVn

ขอบคุณ! มีเอกสารบางอย่างเกี่ยวกับเกณฑ์ที่ใช้ในคำสั่งที่แสดงในโพสต์ของคุณหรือไม่?
ทิม

@Tim ไม่ได้จริงๆ ฉันคาดว่าการแปลงจะใช้เปอร์เซ็นต์ของค่าสูงสุด (ซึ่งควรเป็น 256 ต่อแชแนล) หรือค่าเฉพาะ แต่ฉันจะได้รับผลลัพธ์ที่เป็นประโยชน์เมื่อระบุเปอร์เซ็นต์เท่านั้น เมื่อคุณใช้เครื่องมือกราฟิกรวมถึง GIMP โดยทั่วไปคุณจะมีฮิสโตแกรมที่แสดงการกระจายโทนสีของภาพ ซึ่งจะช่วยได้อย่างมากในการเลือกค่าที่เหมาะสม การใช้เฉพาะบรรทัดคำสั่งยกเว้นว่าคุณมีเหตุผลเฉพาะในการทำเช่นนั้นอาจเป็นปัญหามากกว่าที่ควรค่า
CVN

2
ในฐานะที่เป็นบันทึกด้านข้างมีวิธีการกำหนดเกณฑ์ขั้นต่ำอื่น ๆ ที่ไม่จำเป็นต้องพึ่งพาระดับเกณฑ์ที่กำหนดค่าตายตัว ตัวอย่างเช่น ImageMagick รวมถึง-latการทำเกณฑ์การปรับตัวในท้องถิ่นโดยคำนึงถึงพิกเซลโดยรอบ
voithos

7

คุณสามารถใช้ Imagemagick:

convert test.png -colorspace Gray gray_colorspace.png

จากที่นี่

นี่คือสิ่งที่ฉันได้รับหลังจากใช้กับภาพของคุณ:

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


10
"Binary" มาจาก "bi" ความหมาย "สอง" ดังนั้นฉันคิดว่า OP ต้องการแปลงภาพให้เป็นขาวดำที่บริสุทธิ์ การแปลงเป็นโทนสีเทาให้ผลมากกว่าสองระดับ
CVn

ตกลงกัน! เหมาะสมแล้ว +1
mkc

2

-monochromeจาก ImageMagick เป็นตัวเลือกที่ใช้การทำสมาร์ท dithering และทำให้การแสดงผลมากขึ้นกว่าที่-thresholdคุณตั้งใจไว้สำหรับการบริโภคของมนุษย์:

convert -monochrome signature.png out.png

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

ไม่ได้สร้างความแตกต่างอย่างมากสำหรับภาพที่เรียบง่าย แต่สำหรับภาพที่มีขนาดใหญ่กว่า


1

คุณยังสามารถทำสิ่งนี้ได้อย่างง่ายดายด้วยnetpbmชุดเครื่องมือ:

anytopnm inputfile | ppmtopgm | pgmtopbm > outputfile

ppmtopgmแปลงเป็นรูปภาพระดับสีเทาpgmtopbmแปลงเป็นรูปภาพขาวดำและจากนั้นเราเปลี่ยนเส้นทางผลลัพธ์ไปยังไฟล์ มันจะอยู่ในรูปแบบ pbm; หากคุณต้องการอะไรที่เหมือนกันคุณจะต้องเพิ่มตัวแปลงเอาต์พุต (เช่นpnmtopngหรือบางอย่าง)

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