How to plot intensity profile of an image
    43 views (last 30 days)
  
       Show older comments
    
I want to plot the intensity profile of this image. I tried using improfile but I don't really know how it works. Can anyone help?

1 Comment
  Walter Roberson
      
      
 on 22 Mar 2018
				An intensity profile along which direction?
If you want a profile along a horizontal or vertical line then just use array indexing to extract the vector, and then plot it.
Accepted Answer
  Akira Agata
    
      
 on 22 Mar 2018
        Like this?
I = imread('Capture.PNG');
x = [0 size(I,2)];
y = [size(I,1)/2 size(I,1)/2];
c = improfile(I,x,y);
figure
subplot(2,1,1)
imshow(I)
hold on
plot(x,y,'r')
subplot(2,1,2)
plot(c(:,1,1),'r')
hold on
plot(c(:,1,2),'g')
plot(c(:,1,3),'b')

5 Comments
  Warid Islam
      
 on 9 Jul 2019
				Hi,
How can we plot the intensity profile of the same image along the vertical direction instead of the horizontal direction? Thank you.
More Answers (4)
  Akira Agata
    
      
 on 9 Jul 2019
        Hi Warid-san,
You can do it by the same way, like the following.
I = imread('Capture.PNG');
% Since size(I,2)/2 = 215.5, I have set the value '215' directly for x
x = [215 215];
y = [0 size(I,1)];
c = improfile(I,x,y);
figure
subplot(2,1,1)
imshow(I);
hold on
plot(x,y,'r')
subplot(2,1,2)
plot(c(:,1,1),'r')
hold on
plot(c(:,1,2),'g')
plot(c(:,1,3),'b')

4 Comments
  Vivek
 on 10 Aug 2022
				Hi Akira San,How Can you plot the 1D profile of a rectangular region instead of just line ?Tx,vivek
  Lorenzo Gentili
 on 20 Aug 2019
        Hi Akira, 
I'm trying to obtain an intesity profile of the image below, but I need more than a line. I would like to have at least 5 vertical line in order to understand how the intesity vary in different point of the image ( lets say the 2 boundaries, the center and 2 point between the boundaries and the center). Is it possible to obtain an unique intensity profile that is the sum of 5 intesity profile obtained by the verical lines ? 
Thank you  for your help 
Lorenzo 

4 Comments
  Image Analyst
      
      
 on 3 Mar 2022
				
      Edited: Image Analyst
      
      
 on 3 Mar 2022
  
			@YOGITAA YOGITAA, here is the code:
verticalProfile = mean(grayImage(:, column1:column2), 2);
horizontalProfile = mean(grayImage(row1:row2, :), 1);
  r r
 on 15 May 2020
        
      Edited: Walter Roberson
      
      
 on 16 May 2020
  
      I have image of a tumor in it and I want to do it the same way https://www.mathworks.com/matlabcentral/answers/389889-how-to-plot-intensity-profile-of-an-image 
, but every time the response is
'improfile' requires Image Processing Toolbox.
Error in line (line 4)
c = improfile(I,x,y);
1 Comment
  Walter Roberson
      
      
 on 16 May 2020
				You need the Image Processing Toolbox to use improfile()
improfile() uses linspace() to create vectors of coordinates between the two endpoints, and uses interp2() to interpolate at the coordinates; it does the interpolation once for each color channel.
The question then becomes what coordinates you should interplate at
  fransec
 on 9 Jun 2020
        Hello everybody,
Anyone knows how to make an image profile like ones you showed, but but along the diagonal of an image?
Thank you so much.
2 Comments
  Walter Roberson
      
      
 on 9 Jun 2020
				[rows, cols, ~] = size(YourImage);
n = min(rows,cols);
prof_diag = improfile(YourImage, [1 n], [1 n]);    %diagonal
prof_antidiag = improfile(YourImage, [n 1], [1 n]);  %anti-diagonal
  Christopher Gordon
 on 22 Feb 2021
				Hey!  Question along the same lines.  I have 30 vertical lines across a 1024 column image/matrix.  Is there a way that I can interpolate/extrapolate the remaining columns to get the entire image/matrix?
See Also
Categories
				Find more on Annotations in Help Center and File Exchange
			
	Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!