2012-02-04 44 views
8

Tôi biết vấn đề phát hiện cạnh đã được đăng trước (trong Java: Count the number of objects in an Image, ngôn ngữ độc lập: Image edge detection), nhưng tôi muốn biết cách triển khai nó trong python.Phát hiện cạnh và tính toán độ cong của Python

Tôi đang tiến hành dò ​​tìm cạnh và tính toán độ cong xung quanh cạnh trên một số hình dạng đơn giản (hình dạng nhị phân có một số nhiễu). Tôi biết có một số wrapper cho OpenCV, nhưng không chắc chắn đó là một trong những tốt hơn: pyopencv, pycv, pycvf?

Vì tôi về cơ bản chỉ thực hiện hai tác vụ này, tôi cũng không chắc liệu tự mình triển khai nhanh hơn là sử dụng thư viện hay không.

+1

Tôi khuyên bạn nên tải xuống OpenCV từ [trang web] của họ (http://opencv.willowgarage.com/wiki/) - nếu bạn biên dịch nó bằng cách sử dụng hướng dẫn của họ, bạn sẽ tự động nhận được trình bao bọc python ('import cv2'). –

+2

Ngoài ra, hãy xem phần 'scipy.ndimage' http://docs.scipy.org/doc/scipy/reference/ndimage.html –

Trả lời

11

Chúng tôi có các thuật toán phân khúc và phát hiện cạnh trong tích cực phát triển scikit-image mà bạn có thể tìm thấy hữu ích:

Scikit Images Examples

+0

Phát hiện cạnh là tuyệt vời. Bạn sẽ thực hiện tính toán độ cong? – clwen

+0

@clwen Bạn định nghĩa độ cong như thế nào? Nếu bạn đưa cho tôi một bài báo hoặc một ví dụ, chúng tôi có thể cho nó một shot. –

+0

Tôi đã được tìm kiếm phát hiện cạnh canny trong python mãi mãi! Anh yêu em... – tylerthemiler

3

Có một cách rất đơn giản để tìm đường nét trong python với hình ảnh scikit. Đó thực sự chỉ là một vài dòng mã, như sau:

from skimage import measure 
    contours = measure.find_contours(gimg, 0.8) 

Điều này trả về biểu diễn vectơ của đường đồng mức. Trong một mảng riêng biệt cho mỗi dòng. Và cũng dễ dàng giảm số điểm trong một dòng bằng cách tính toán một xấp xỉ. Dưới đây là mô tả dài hơn một chút với mã nguồn: image vectorization with python

3

Bạn có thể dễ dàng đạt được phát hiện cạnh bằng scipy trong python.

from scipy import ndimage 
edge_horizont = ndimage.sobel(greyscale, 0) 
edge_vertical = ndimage.sobel(greyscale, 1) 
magnitude = np.hypot(edge_horizont, edge_vertical) 

Và đây là ví dụ về hình ảnh gốc và hình ảnh sau khi phát hiện cạnh. enter image description here

Trong hình ảnh quét, có special page with explanations cách phát hiện cạnh.

Các vấn đề liên quan