2012-07-26 48 views
6

如何使用編程(openCV或MATLAB)在以下圖像中找到內部圓(或外部圓)的每個像素的座標?
imtool提供此信息,但它是鼠標驅動的。使用編程查找每個像素的座標

enter image description here

更新

我用imtool檢測這些位置,通過把上的每個點我的鼠標光標在圓上和手動注意到此值。但是,我如何使用手動編程來做到這一點,我不能在圓上做很多點。

+4

得到的座標值,你嘗試過什麼?你可以遍歷所有的像素,並檢查它是否是黑色的。 – iiro 2012-07-26 06:15:06

回答

5

在Matlab中,你可以做:

im = imread('im.png');  %# load image 
[y,x] = find(all(im<5, 3)); %# find black pixels 
position = [x,y];   %# display them 
+0

你能解釋(im == 0,3)嗎?爲什麼3?是因爲你發現r,g,b值等於0? – gpuguy 2012-07-26 08:36:36

+1

@gpuguy:查看[all](http://www.mathworks.nl/help/techdoc/ref/all.html)的語法。它檢查一個像素的所有值是否沿着第三維(即所有顏色層)爲零。 – Junuxx 2012-07-26 08:40:30

+0

@gpuguy:如@Junuxx所說,「all(A == 0,3)'檢查所有3種顏色(第三維)的值是0,這意味着顏色是黑色的。 – Oli 2012-07-26 09:22:47

0

這是一個使用openCV查找色調和飽和度過濾對象的指南。 也許你可以使用它與閾值黑色?

http://myrobotlab.org/content/opencv-how-isolate-object-hue-saturation-and-value

還有這裏檢測圓的方法:

http://cgi.cse.unsw.edu.au/~cs4411/wiki/index.php?title=OpenCV_Guide

+0

我對檢測形狀不感興趣。我只想獲取圓圈上像素的位置。我可以使用imtool,但它會是手動的;我將不得不將鼠標光標放在圓上的每個點上,並記下位置x,y。 – gpuguy 2012-07-26 07:22:36

-1

可以實現這個代碼.. 。

a=rgb2gray(imread('image.tif')); 
[x,y,z]=size(a); 
count=0; 
for i=1:x 
    for j=1:y 
     if a(i,j)==0 
      count=count+1; 
      new_x(count)=j; 
      new_y(count)=i; 
     end 
    end 
end 

您可以從new_x & new_y

+0

這是一個**糟糕的**解決方案! (1)你不預先分配'new_x'和'new_y'。 (2)你使用嵌套循環。這完全不是**這種做Matlab任務的方式! – Shai 2014-07-14 06:28:42