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

조회 수: 8 (최근 30일)
Eric Martz
Eric Martz 2019년 7월 22일
댓글: Walter Roberson 2019년 7월 23일
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!

채택된 답변

Image Analyst
Image Analyst 2019년 7월 22일
(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
Image Analyst
Image Analyst 2019년 7월 23일
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 2019년 7월 23일
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.

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Walter Roberson
Walter Roberson 2019년 7월 23일
rcenters = P( sub2ind(size(P), y, x, ones(size(y))) );

Akira Agata
Akira Agata 2019년 7월 23일
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);

카테고리

Help CenterFile Exchange에서 Image Processing Toolbox에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by