2014-05-15 26 views
6

Trong phân tích dữ liệu hiện tại của tôi, tôi có một số hình ảnh được phân đoạn như ví dụ bên dưới.Đường cong phù hợp với hình ảnh được phân đoạn

Vấn đề của tôi là tôi muốn vừa với đa thức hoặc spline (s.th. one-dimensional) đến một khu vực nhất định (màu đỏ) trong hình ảnh được phân đoạn. (kết quả sẽ là đường màu đen).

Thông thường tôi sẽ sử dụng điều gì đó như hồi quy khoảng cách trực giao, vấn đề là cần một số chức năng phù hợp mà tôi không có trong trường hợp này. Vậy cách tiếp cận tốt nhất để làm điều này với python/numpy là gì? Có thể có một số thuật toán chuẩn cho loại vấn đề này không?

example

UPDATE: có vẻ như kỹ năng vẽ của tôi có lẽ không phải là tốt nhất, khu vực màu đỏ trong hình cũng có thể có một số tiếng ồn ngẫu nhiên và không cần phải được kết nối hoàn toàn (có thể có lỗ hổng nhỏ do tiếng ồn).

UPDATE2: Mục tiêu tổng thể sẽ là có đường cong parametrized p (t) trả về vị trí tức là p (t) => (x, y) cho t trong [0,1]. nơi t = 0 bắt đầu của đường màu đen, t = 1 đầu của đường màu đen.

+3

Bạn sẽ cần phải thử nghiệm, nhưng tất cả mọi thứ bạn cần phải được có sẵn trong ['skimage.morphology'] (http://scikit-image.org/docs/dev/api/skimage.morphology.html). Tôi đoán bạn sẽ muốn làm ['đóng'] (http://scikit-image.org/docs/dev/api/skimage.morphology.html#closing) để loại bỏ nhiễu, trước hoặc sau khi chuyển đổi nó thành một hình ảnh nhị phân, có thể bằng cách đẩy mạnh, theo sau là ['skeletonize'] (http://scikit-image.org/docs/dev/api/skimage.morphology.html#skimage.morphology.sk expandize). – Jaime

+0

Giả sử tôi nhận được một bộ xương có thể chấp nhận được từ mảng của tôi. Điều gì sẽ là bước tiếp theo để có được một đa thức/spline. – jrsm

+1

Thật đáng xem trang web Stack Exchange http://dsp.stackexchange.com/ nếu bạn định làm gì phức tạp hơn. – Hooked

Trả lời

3

Tôi đã sử dụng scipy.ndimagethis gist làm mẫu. Điều này giúp bạn gần như có, bạn sẽ phải tìm một cách hợp lý để tham số hóa đường cong từ hình ảnh chủ yếu là skeletonized.

from scipy.misc import imread 
import scipy.ndimage as ndimage 

# Load the image 
raw = imread("bG2W9mM.png") 

# Convert the image to greyscale, using the red channel 
grey = raw[:,:,0] 

# Simple thresholding of the image 
threshold = grey>200 

radius = 10 
distance_img = ndimage.distance_transform_edt(threshold) 
morph_laplace_img = ndimage.morphological_laplace(distance_img, 
                (radius, radius)) 
skeleton = morph_laplace_img < morph_laplace_img.min()/2 

import matplotlib.cm as cm 
from pylab import * 
subplot(221); imshow(raw) 
subplot(222); imshow(grey, cmap=cm.Greys_r) 
subplot(223); imshow(threshold, cmap=cm.Greys_r) 
subplot(224); imshow(skeleton, cmap=cm.Greys_r) 
show() 

enter image description here

Bạn có thể tìm thấy câu trả lời khác mà tham khảo skeletonization hữu ích, một ví dụ trong số đó là ở đây:

Problems during Skeletonization image for extracting contours

+0

Điều này dường như làm việc khá tốt đẹp rồi, ý tưởng của tôi là chia bộ xương thành N đoạn có thể và sử dụng nó như các nút cho một nội suy spline nhưng tôi chưa chắc chắn. – jrsm

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