How can I find RGB values of a matrix of coordinates of an image?
7 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Eric Martz
el 22 de Jul. de 2019
Comentada: Walter Roberson
el 23 de Jul. de 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!
0 comentarios
Respuesta aceptada
Image Analyst
el 22 de Jul. de 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 comentarios
Image Analyst
el 23 de Jul. de 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.
Más respuestas (2)
Walter Roberson
el 23 de Jul. de 2019
rcenters = P( sub2ind(size(P), y, x, ones(size(y))) );
0 comentarios
Akira Agata
el 23 de Jul. de 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);
1 comentario
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!