การแยกคุณสมบัติของภาพใน Python


18

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

อย่างไรก็ตามฉันหลงทางอย่างสิ้นเชิงเมื่อพูดถึงเทคนิคการแยกฟีเจอร์ในไพ ธ อน ที่ปรึกษาของฉันโน้มน้าวให้ฉันใช้รูปภาพที่ไม่ได้กล่าวถึงในชั้นเรียน

ใครสามารถบอกฉันถึงเอกสารที่มีความหมายหรืออ่านหรือแนะนำวิธีการในการพิจารณา?


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

ฉันคาดว่าจะใช้ Python และแพ็คเกจโอเพนซอร์สเท่านั้น การเขียนซอร์สโค้ดของฉันเองนั้นไม่ได้รับความสนใจ หลักสูตรนี้เป็นหลักสูตรระดับปริญญาโท ชั้นเรียนเป็นหลักสูตรวิทยาศาสตร์ข้อมูลเบื้องต้น สิ่งสุดท้ายที่เรากล่าวถึงคือการเลือกคุณสมบัติแม้ว่าการอภิปรายเกือบทั้งหมดจะเกี่ยวกับข้อมูลข้อความ ไม่มีข้อกำหนดด้านประสิทธิภาพนอกเหนือความถูกต้อง ~ 70%
Jeremy Barnes

คำตอบ:


11

ในภาพเทคนิคที่ใช้บ่อยสำหรับการดึงคุณสมบัติคือการแปลงและการทำให้มัว

Binarizing:แปลงอาร์เรย์ภาพเป็น 1s และ 0s สิ่งนี้จะทำในขณะแปลงภาพเป็นภาพ 2D แม้แต่การปรับสเกลสีเทาก็สามารถใช้ได้เช่นกัน มันให้เมทริกซ์เชิงตัวเลขของภาพ สีเทาใช้พื้นที่น้อยกว่ามากเมื่อเก็บไว้ในแผ่นดิสก์

นี่คือวิธีที่คุณทำใน Python:

from PIL import Image

%matplotlib inline  

#Import an image
image = Image.open("xyz.jpg")

image

ภาพตัวอย่าง:

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

ตอนนี้เปลี่ยนเป็นระดับสีเทา:

im = image.convert('L')

im

จะคืนรูปภาพนี้ให้คุณ:

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

และเมทริกซ์สามารถมองเห็นได้ด้วยการทำสิ่งนี้:

array(im)

อาร์เรย์จะมีลักษณะดังนี้:

array([[213, 213, 213, ..., 176, 176, 176],
       [213, 213, 213, ..., 176, 176, 176],
       [213, 213, 213, ..., 175, 175, 175],
       ..., 
       [173, 173, 173, ..., 204, 204, 204],
       [173, 173, 173, ..., 205, 205, 204],
       [173, 173, 173, ..., 205, 205, 205]], dtype=uint8)

ตอนนี้ใช้พล็อตฮิสโตแกรมและ / หรือพล็อตรูปร่างเพื่อดูคุณสมบัติภาพ:

from pylab import *

# create a new figure
figure()
gray()
# show contours with origin upper left corner
contour(im, origin='image')
axis('equal')
axis('off')


figure()


hist(im_array.flatten(), 128)

show()

นี่จะคืนค่าพล็อตให้คุณซึ่งมีลักษณะดังนี้:

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

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

และนี่คือวิธีที่คุณทำใน Python:

from PIL import *


figure()
p = image.convert("L").filter(ImageFilter.GaussianBlur(radius = 2))
p.show()

และภาพเบลอคือ:

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

ดังนั้นนี่คือวิธีการบางอย่างที่คุณสามารถทำวิศวกรรมคุณลักษณะ และสำหรับวิธีการขั้นสูงคุณต้องเข้าใจพื้นฐานของ Computer Vision และ Neural Networks รวมถึงตัวกรองประเภทต่าง ๆ ความสำคัญของพวกเขาและคณิตศาสตร์ที่อยู่เบื้องหลัง


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

ดีใจที่คำตอบของฉันช่วยคุณ :)
Dawny33

8

บทแนะนำที่ยอดเยี่ยมนี้ครอบคลุมพื้นฐานของงานประสาทเทียมที่กำลังบรรลุผลงานศิลปะในงานที่มีวิสัยทัศน์ส่วนใหญ่:

http://deeplearning.net/tutorial/lenet.html

มีตัวเลือกมากมายสำหรับ CNNs ใน python รวมถึง Theano และห้องสมุดที่สร้างอยู่ด้านบน (ฉันพบว่า keras ใช้งานง่าย)

หากคุณต้องการหลีกเลี่ยงการเรียนรู้อย่างลึกซึ้งคุณอาจมองเข้าไปใน OpenCV ซึ่งสามารถเรียนรู้คุณสมบัติอื่น ๆ อีกมากมายคุณสมบัติเรียงซ้อน Haar และคุณสมบัติ SIFT

http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_feature2d/py_table_of_contents_feature2d/py_table_of_contents_feature2d.html


1

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

นี่คือการสอนที่ดีสำหรับการเรียนรู้เกี่ยวกับโครงข่ายประสาทเทียม คุณสามารถดาวน์โหลดรหัสได้และสามารถเปลี่ยนแปลงได้ตามคำจำกัดความของปัญหา แต่คุณต้องเรียนรู้ python และ theano library สำหรับการประมวลผลและคุณจะได้รับบทเรียนที่ดีเช่นกัน

http://deeplearning.net/tutorial/lenet.html

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