How can I find RGB values of a matrix of coordinates of an image?

5 vues (au cours des 30 derniers jours)
Eric Martz
Eric Martz le 22 Juil 2019
Commenté : Walter Roberson le 23 Juil 2019
Hi,
I'm trying to pull the RGB values from a list of (x,y) coordinates that are centers of circles. My plan was to get the matrix of each component (r, g, and b) this way:
P = imread('image'); ...
x = centers(:, 1);
y = centers(:, 2);
rcenters = P(round(x), round(y), 1);
x is a 668 x 1 matrix, and so is y, so I was hoping rcenters would be 668 x 2, but instead it's 668 x 668, which does not make sense to me. I had to round the x and y coordinates to the nearest integer so that it would have integer indices.
How could I get it to return a 668 x 2 matrix with the R value of the x coordinate in column 1 and the R value of the y coordinate in column 2?
Thanks in advance!

Réponse acceptée

Image Analyst
Image Analyst le 22 Juil 2019
(x,y) is NOT (row, column) -- it's (column, row). You've made a very common beginner mistake. Put y first -- P(y, x)
x = round(centers(:, 1));
y = round(centers(:, 2));
rgbValues = zeros(length(x), 3)
counter = 1;
for col = 1 : length(y)
for row = 1 : length(x)
rgbValues(counter, :) = P(y(row), x(col), :);
counter = counter + 1;
end
end
  3 commentaires
Image Analyst
Image Analyst le 23 Juil 2019
Did you see this line in the code:
rgbValues(counter, :) = P(y(row), x(col), :);
That gives you the RGB values. Red is column1, green is col2 and blue is col3.
Eric Martz
Eric Martz le 23 Juil 2019
I figured it out. I edited the code to make this:
x = round(centers(:, 1));
y = round(centers(:, 2));
rgbValues = zeros(length(x), 3);
counter = 1;
for row = 1 : length(x)
rgbValues(counter, :) = P(round(centers(row, 2)), round(centers(row, 1)), :);
counter = counter + 1;
end
pts = [x, y];
rgb = horzcat(rgbValues, pts);
The issue with the code you provided was that it gave the rgb value of every possible combination of every x and y coordinate instead of just the x and y coordinates that went together.

Connectez-vous pour commenter.

Plus de réponses (2)

Walter Roberson
Walter Roberson le 23 Juil 2019
rcenters = P( sub2ind(size(P), y, x, ones(size(y))) );

Akira Agata
Akira Agata le 23 Juil 2019
Another possible solution:
row = round(centers(:, 1));
col = round(centers(:, 2));
R = arrayfun(@(x,y) P(x,y,1),row,col);
G = arrayfun(@(x,y) P(x,y,2),row,col);
B = arrayfun(@(x,y) P(x,y,3),row,col);

Catégories

En savoir plus sur Read, Write, and Modify Image dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by