Tính năng trích xuất hình ảnh trong Python


18

Trong lớp của tôi, tôi phải tạo một ứng dụng bằng cách sử dụng hai trình phân loại để quyết định xem một đối tượng trong ảnh là một ví dụ về phylum porifera (seaprid) hay một số đối tượng khác.

Tuy nhiên, tôi hoàn toàn bị mất khi nói đến các kỹ thuật khai thác trong python. Cố vấn của tôi đã thuyết phục tôi sử dụng những hình ảnh chưa được trình bày trong lớp.

Bất cứ ai có thể hướng tôi đến tài liệu có ý nghĩa hoặc đọc hoặc đề xuất phương pháp để xem xét?


Bạn đã đề cập đến cố vấn, vì vậy tôi cho rằng đây là một phần của bài tập sau đại học? Bạn có quyền truy cập vào bất kỳ phần mềm thương mại nào không, hoặc bạn dự kiến ​​sẽ làm điều này chỉ với các gói Python và nguồn mở? Hiện tại bạn đang học gì về lớp học và tên của lớp là gì? Ngoài ra, có yêu cầu về hiệu suất về thời gian cần thiết để đưa ra câu trả lời không?
MLowry

Tôi dự kiến ​​chỉ sử dụng Python và các gói nguồn mở. Viết mã nguồn của riêng tôi thậm chí không được khuyến khích. Đây là khóa học cấp thạc sĩ. Lớp học là một khóa học Khoa học dữ liệu giới thiệu. Điều cuối cùng chúng tôi đề cập là lựa chọn tính năng, mặc dù hầu hết tất cả các cuộc thảo luận là về dữ liệu văn bản. Không có yêu cầu về hiệu suất ngoài độ chính xác ~ 70%
Jeremy Barnes

Câu trả lời:


11

Trong hình ảnh, một số kỹ thuật được sử dụng thường xuyên để trích xuất tính năng là tạo nhị phânlàm mờ

Binarizing: chuyển đổi mảng hình ảnh thành 1s và 0. Điều này được thực hiện trong khi chuyển đổi hình ảnh thành hình ảnh 2D. Ngay cả tỉ lệ xám cũng có thể được sử dụng. Nó cung cấp cho bạn một ma trận số của hình ảnh. Grayscale chiếm không gian ít hơn nhiều khi được lưu trữ trên Đĩa.

Đây là cách bạn làm điều đó trong Python:

from PIL import Image

%matplotlib inline  

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

image

Hình ảnh ví dụ:

nhập mô tả hình ảnh ở đây

Bây giờ, chuyển đổi thành thang màu xám:

im = image.convert('L')

im

sẽ trả lại cho bạn hình ảnh này:

nhập mô tả hình ảnh ở đây

Và ma trận có thể được nhìn thấy bằng cách chạy này:

array(im)

Các mảng sẽ trông giống như thế này:

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)

Bây giờ, sử dụng biểu đồ biểu đồ và / hoặc biểu đồ đường viền để xem các tính năng hình ảnh:

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()

Điều này sẽ trả lại cho bạn một cốt truyện, trông giống như thế này:

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Làm mờ: Thuật toán làm mờ lấy trung bình trọng số của các pixel lân cận để kết hợp màu môi trường xung quanh vào mỗi pixel. Nó tăng cường các đường viền tốt hơn và giúp hiểu các tính năng và tầm quan trọng của chúng tốt hơn.

Và đây là cách bạn làm điều đó trong Python:

from PIL import *


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

Và hình ảnh mờ là:

nhập mô tả hình ảnh ở đây

Vì vậy, đây là một số cách mà bạn có thể làm kỹ thuật tính năng. Và đối với các phương pháp nâng cao, bạn phải hiểu những điều cơ bản về Thị giác máy tính và mạng lưới thần kinh, cũng như các loại bộ lọc khác nhau và tầm quan trọng của chúng và toán học đằng sau chúng.


1
Cảm ơn bạn rất nhiều. Tôi đã đăng về điều này trên một vài nơi và cho đến nay của bạn là câu trả lời nhiều thông tin nhất. Tôi nhận ra rằng tôi đã hiểu sai về cách trích xuất tính năng của hình ảnh theo khái niệm.
Jeremy Barnes

Rất vui vì câu trả lời của tôi đã giúp bạn :)
Dawny33

8

Hướng dẫn tuyệt vời này bao gồm những điều cơ bản của thần kinh tích chập, hiện đang đạt được trạng thái hiệu suất nghệ thuật trong hầu hết các nhiệm vụ tầm nhìn:

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

Có một số tùy chọn cho CNN trong python, bao gồm Theano và các thư viện được xây dựng trên nó (tôi thấy máy ảnh rất dễ sử dụng).

Nếu bạn muốn tránh học sâu, bạn có thể tìm hiểu về OpenCV, có thể tìm hiểu nhiều loại tính năng khác, dòng thác Haar và tính năng 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

Như Jeremy Barnes và Jamesmf đã nói, bạn có thể sử dụng bất kỳ thuật toán học máy nào để giải quyết vấn đề. Họ mạnh mẽ và có thể xác định các tính năng tự động. Bạn chỉ cần cung cấp cho thuật toán dữ liệu đào tạo chính xác. Vì nó là cần thiết để làm việc trên hình ảnh, mạng lưới thần kinh tích chập sẽ là một lựa chọn tốt hơn cho bạn.

Đây là một hướng dẫn tốt để tìm hiểu về mạng nơ ron tích chập. Bạn cũng có thể tải xuống mã và có thể thay đổi theo định nghĩa vấn đề của bạn. Nhưng bạn cần học thư viện python và theano để xử lý và bạn cũng sẽ nhận được hướng dẫn tốt cho việc đó

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.