2013-03-02 223 views
1

樣本陣列我有這樣的二值化圖像:沿路徑

img

爲0和1的值numpy的陣列。

我想品嚐它沿路徑每10個像素,如:

img

我知道怎麼樣正交對象,通過切片陣列,但我不知道該怎麼辦形狀不規則,並獲得均勻分佈的「點」集。

+0

您需要先參數化路徑。 – tacaswell 2013-03-02 06:03:26

+0

如果這是唯一的方法,這將是矯枉過正,因爲上面的圖像太簡化了 – theta 2013-03-02 06:09:03

回答

2

您可以使用OpenCV找到findContours的路徑。這裏是演示代碼,x & y是路徑上像素的座標。

import numpy as np 
import cv2 
import pylab as pl 
img = cv2.imread("img.png") 
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
ret,img = cv2.threshold(img,127,255,0) 
r = cv2.findContours(255-img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 
c = r[0][0] 
x, y = cc[::10, 0, 0], cc[::10, 0, 1] 
pl.figure(figsize=(10, 10)) 
pl.imshow(img, cmap="gray", interpolation="nearest") 
pl.plot(cc[::10, 0, 0], cc[::10, 0, 1], "o") 

這裏是輸出:

enter image description here

我只選擇一個點,從路徑上的每個10分,所以附近的兩個點之間的距離是不一樣的。但是可以使用一些插值方法將路徑轉換爲平滑曲線,然後找到等距點。

+0

謝謝,作品精美!我用ndimage label/find_object函數嘗試自己,然後通過三角測量,但從未到達那裏。 – theta 2013-03-02 22:37:26