2012-07-26 10 views
6

Qual è il modo per trovare le coordinate di ciascun pixel del cerchio interno (o esterno) nell'Immagine seguente utilizzando la programmazione (openCV o MATLAB)?
imtool fornisce queste informazioni ma è guidato dal mouse.Ricerca delle coordinate di ciascun pixel mediante la programmazione

enter image description here

Aggiornamento

ho usato imtool per rilevare questi luoghi, mettendo il mio cursore del mouse su ogni punto del cerchio e il manuale di nota di questo valore. Ma come faccio a farlo usando la programmazione come manualmente non posso farlo per così tante pinte sul cerchio.

+4

cosa hai provato? È possibile eseguire iterazioni su tutti i pixel e controllare se è nero o no. – iiro

risposta

5

In Matlab, si può solo fare:

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

Puoi spiegare (im == 0,3)? perché 3? è perché stai trovando r, g, b valori uguali a 0? – gpuguy

+1

@gpuguy: vedere la sintassi di [all] (http://www.mathworks.nl/help/techdoc/ref/all.html). Controlla se tutti i valori di un pixel sono pari a zero lungo la terza dimensione (cioè tutti i livelli di colore). – Junuxx

+0

@gpuguy: come detto da @Junuxx, 'all (A == 0,3)' controlla che i valori di tutti i 3 colori (terza dimensione) siano 0, il che significa che il colore è nero. – Oli

0

Ecco una guida per utilizzare openCV per trovare un oggetto con filtri di tonalità e saturazione. Forse puoi usarlo con il nero di soglia?

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

V'è anche un metodo per rilevare i cerchi qui:

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

+0

Non sono interessato a rilevare forme. Voglio solo ottenere la posizione dei pixel sui cerchi. Posso usare imtool, ma sarà manuale; dovrò posizionare il cursore del mouse su ogni punto del cerchio e annotare la posizione x, y. – gpuguy

-1

è possibile implementare questo codice ..

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 

È possibile ottenere i valori di coordinate dal new_x & new_y

+0

questa è una ** terribile ** soluzione! (1) non si pre-allocano 'new_x' e' new_y'. (2) usi i cicli annidati. Questo è completamente ** non ** il modo Matlab-ish di fare questo tipo di compito! – Shai

Problemi correlati