How to extract RGB
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
I'm supposed to "extract rgb" values from 5 points from an image and I am very confused on how to do it. I am then supposed to get each of those RGB and convert it to HSI so that I am supposed to have 5 HSI. It sounds like I have to create 5 rgb variables, right? If so, what is the function I need to use?
2 comentarios
Geoff Hayes
el 24 de En. de 2018
Davidson - is your image three dimensional (and so has the red, green, and blue components)? Are you unsure how to extract the red component for one of these five points?
Davidson Bock
el 24 de En. de 2018
Editada: Davidson Bock
el 24 de En. de 2018
Respuestas (2)
RobF
el 24 de En. de 2018
Extraction of RGB values:
C = imread('ngc6543a.jpg'); % Sample image file
% Coordinates of point/pixel P1: x1, y1
x1 = 354; % Sample coordinates
y1 = 284; % Sample coordinates
% Extract values for red (R), green (G) and blue (B):
R1 = C(x1, y1, 1) % Red is first layer
G1 = C(x1, y1, 2) % Green is second layer
B1 = C(x1, y1, 1) % Blue is third layer
Information on RGB to HSI conversion:
DGM
el 11 de Dic. de 2022
I'm just going to throw this down here. MATLAB has no native HSI conversion tools. It has HSV tools, but if you actually want HSI, you'll have to find third-party conversion tools. @RobF linked to the tools from MIMT. I'll continue on the assumption that MIMT is available.
This will collect up to 5 points (discarding any invalid points). Results will be returned as color tables in RGB and HSI as instructed. For sake of comparison, I'm also converting a copy to LAB as well.
% load an image
inpict = imread('peppers.png');
% input must be RGB
% MIMT imsize() will return fixed-length vector output
% so we can know that sz(3) will always exist, and that it will be
% correct even if there are trailing non-singleton dimensions
sz = imsize(inpict,3); % size of first three dims
if sz(3)~=3
error('input must be RGB')
end
% display it and collect 5 points
imshow(inpict);
[x y] = ginput(5);
% round to nearest pixel
x = round(x);
y = round(y);
% discard points which lie outside image area
badpts = x<1 | x>sz(2) | y<1 | y>sz(1);
% generate index list
x = repmat(x(~badpts),[1 sz(3)]);
y = repmat(y(~badpts),[1 sz(3)]);
ch = repmat(1:sz(3),[size(x,1) 1]);
idx = sub2ind(sz,y,x,ch);
% selected points as a Px3 color table of unit-scale RGB tuples
CTrgb = im2double(inpict(idx))
CTrgb =
0.2627 0.1451 0.2706
0.2706 0.1608 0.2902
0.2784 0.1569 0.2902
0.3020 0.1686 0.2902
0.2745 0.1608 0.2863
% selected points as a Px3 color table of LAB tuples
% native conversion tools accept color tuples/tables directly
CTlab = rgb2lab(CTrgb)
CTlab =
19.8274 20.2164 -14.2700
21.3782 19.5417 -15.2412
21.4010 20.9113 -15.1841
22.9996 21.2279 -12.6460
21.4656 19.6757 -14.4189
% selected points as a Px3 color table of HSI tuples
% MIMT conversion tools generally don't accept color tables due to the ambiguity
% so permute the CT so that it can be processed explicitly as a Px1x3 image
% MIMT ctflop(mat) is the same as permute(mat,[1 3 2])
% this is an involution, so the second call returns the array to Px3
CThsi = ctflop(rgb2hsi(ctflop(CTrgb)))
CThsi =
296.8021 0.3584 0.2261
291.9196 0.3315 0.2405
295.4294 0.3514 0.2418
304.5706 0.3351 0.2536
295.1311 0.3315 0.2405
0 comentarios
Ver también
Categorías
Más información sobre Convert Image Type en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!