How to extract RGB
    21 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!