2015-10-29 5 views
4

Je voudrais prendre une image RVB, trouver les points dans l'image qui sont blancs, et obtenir les coordonnées cartésiennes de ces points dans l'image. J'y suis arrivé la plupart du temps, mais lorsque j'essaie de tracer les coordonnées cartésiennes, j'obtiens une image carrelée verticalement (c'est-à-dire 5 copies superposées de ce que je devrais voir). Quelqu'un sait ce qui pourrait causer cela?Image Répétition de Binaire à Cartésien

Starting Image, Final Image

Code: (JPG est disponible en tant que 2448 x x3264 x 3 uint8)

I = imread('IMG_0245.JPG'); 
imshow(I); % display unaltered image 

% Convert image to grayscale 
I = rgb2gray(I); 
% Convert image to binary (black/white) 
I = im2bw(I, 0.9); 
% Generate cartesian coordinates of image 
imageSize = size(I); 
[x, y] = meshgrid(1:imageSize(1), 1:imageSize(2)); 
PerspectiveImage = [x(:), y(:), I(:)]; 

% Get indices of white points only 
whiteIndices = find(PerspectiveImage(:,3)); 
figure; plot(PerspectiveImage(whiteIndices, 1), PerspectiveImage(whiteIndices, 2),'.'); 
% Flip vertically to correct indexing vs. plotting issue 
axis ij 

Répondre

4

Très simple. Vous déclarez votre meshgrid erroné. Il devrait être:

[x, y] = meshgrid(1:imageSize(2), 1:imageSize(1)); 

Le premier paramètre indique la horizontale des degrés de la grille 2D, et vous voulez en faire varier pour autant de colonnes que vous avez. De même, le deuxième paramètre indique les verticales extensions de la grille 2D, et vous voulez donc faire cela pour autant de lignes que vous avez.

J'ai dû pré-traiter une partie de votre image pour obtenir de bons résultats car votre image originale avait une grande bordure blanche entourant l'image. J'ai dû supprimer cette bordure en supprimant tous les pixels blancs purs. Je lis aussi dans l'image directement à partir StackOverflow:

I = imread('http://s7.postimg.org/ovb53w4ff/Track_example.jpg'); 
mask = all(I == 255, 3); 
I = bsxfun(@times, I, uint8(~mask)); 

Ce fut l'image que je reçois après avoir fait mon pré-traitement:

enter image description here

Une fois que je fais cela et changer votre meshgrid appel, je obtenez ceci:

enter image description here

+1

Désolé au sujet de la bordure blanche - qui est apparu à la suite de l'enregistrement d'une figu Matlab re comme un jpg. Merci d'avoir répondu! – lg22woo

+0

@ lg22woo J'ai pensé :) ça se produit quand vous enregistrez nativement des chiffres dans MATLAB. BTW, je vous recommande d'utiliser l'outil 'export_fig' sur MATLAB FileExchange. Bien meilleur moyen d'enregistrer des figures sur le disque: http://www.mathworks.com/matlabcentral/fileexchange/23629-export-fig - Je l'utilise depuis des années! – rayryeng

+0

Vous êtes les bienvenus aussi! – rayryeng