2012-07-26 21 views
6

¿Cuál es la manera de encontrar las coordenadas de cada píxel del círculo interno (o el exterior) en la siguiente imagen usando la programación (openCV o MATLAB)?
imtool proporciona esta información, pero está dirigida por el mouse.Encontrar coordenadas de cada píxel usando la programación

enter image description here

actualización

que utilizan imtool para detectar estos lugares, poniendo mi cursor del ratón en cada punto de la circunferencia y el manual observando este valor. Pero, ¿cómo lo hago usando la programación como manualmente? No puedo hacerlo por tantas pintas en el círculo.

+4

lo ha intentado? Podrías iterar a través de todos los píxeles y verificar si es negro o no. – iiro

Respuesta

5

En Matlab, sólo se puede hacer:

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

¿Puedes explicar (im == 0,3)? ¿por qué 3? ¿es porque estás encontrando r, g, b valores iguales a 0? – gpuguy

+1

@gpuguy: vea la sintaxis de [all] (http://www.mathworks.nl/help/techdoc/ref/all.html). Comprueba si todos los valores para un píxel son cero a lo largo de la tercera dimensión (es decir, todas las capas de color). – Junuxx

+0

@gpuguy: como dice @Junuxx, 'all (A == 0,3)' comprueba que los valores de los 3 colores (tercera dimensión) son 0, lo que significa que el color es negro. – Oli

0

Aquí hay una guía para usar openCV para encontrar un objeto con matiz y filtrado de saturación. ¿Quizás pueda usarlo con umbrales negros?

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

Existe también un método para la detección de círculos aquí:

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

+0

No estoy interesado en detectar formas. Solo quiero obtener la ubicación de los píxeles en los círculos. Puedo usar imtool, pero será manual; Tendré que colocar el cursor del mouse en cada punto del círculo y anotar la ubicación x, y. – gpuguy

-1

puede implementar este código ..

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 

Usted puede obtener los valores de las coordenadas de new_x & new_y

+0

esta es una ** terrible ** solución! (1) no asigna previamente 'new_x' y' new_y'. (2) usa bucles anidados. ¡Esto es completamente ** no ** la forma Matlab-ish de hacer este tipo de tarea! – Shai

Cuestiones relacionadas