36 views (last 30 days)

Show older comments

I have an image and i can calculate sum of intensities along x and y axis using following code. i want to plot the sum of intensities as histograms on the image along x and y axis, like the example attached. Many thanks for the help

X1=imread('image.png');

intensity_x=sum(X1); %row vector containing the sum of each column.

intensity_y=sum(X1,2); %column vector containing the sum of each row.

Image Analyst
on 13 Nov 2020

Try this:

clc; % Clear the command window.

close all; % Close all figures (except those of imtool.)

clear; % Erase all existing variables. Or clearvars if you want.

workspace; % Make sure the workspace panel is showing.

format long g;

format compact;

fontSize = 18;

fprintf('Beginning to run %s.m ...\n', mfilename);

echo off;

%===============================================================================

% Read in gray scale image.

baseFileName = 'moon.tif';

grayImage = imread(baseFileName);

% Get the dimensions of the image. numberOfColorBands should be = 3.

[rows, columns, numberOfColorBands] = size(grayImage);

% If it's RGB instead of grayscale, convert it to gray scale.

if numberOfColorBands > 1

grayImage = rgb2gray(grayImage);

end

% Display the original image.

subplot(2, 2, 4);

imshow(grayImage);

axis on;

caption = sprintf('Original Image : %s', baseFileName);

title(caption, 'FontSize', fontSize);

impixelinfo;

% Enlarge figure to full screen.

set(gcf, 'Units', 'Normalized', 'Outerposition', [0, 0.1, 1, 0.9]);

[rows, columns, numberOfColorChannels] = size(grayImage);

if numberOfColorChannels == 3

grayImage = rgb2gray(grayImage);

end

% Plot sum of columns -- vertically sum all columns within each row.

verticalSum = sum(grayImage, 2);

subplot(2, 2, 3); % Switch to the axes to the left of the image axes.

plot(verticalSum, 1:rows, 'b-', 'LineWidth', 2);

axis ij; % Invert vertical axis to match the image which has row 1 at the top.

ylabel('Row', 'FontSize', fontSize);

xlabel('Sum of Gray Levels', 'FontSize', fontSize);

ylim([1, rows]);

grid on;

% Plot sum of rows -- vertically sum all rows within each column.

horizontalSum = sum(grayImage, 1);

subplot(2, 2, 2); % Switch to the axes above the image axes.

plot(1 : columns, horizontalSum, 'b-', 'LineWidth', 2);

xlabel('Column', 'FontSize', fontSize);

ylabel('Sum of Gray Levels', 'FontSize', fontSize);

xlim([1, columns]);

grid on;

Image Analyst
on 13 Nov 2020

I gave you an answer here in this link

What I've done in this case is to have two additional axes, one on the left of the image axes, and one below or above it. I plot the vertical profile along the one on the left, with x and y switched, and the horizontal profile along the axes underneath the image.

[rows, columns, numberOfColorChannels] = size(grayImage);

if numberOfColorChannels == 3

grayImage = rgb2gray(grayImage);

end

verticalSum = sum(grayImage, 2);

horizontalSum = sum(grayImage, 1);

axes(handles.axesLeft); % Switch to the axes to the left of the image axes.

plot(verticalSum, 1:rows, 'b-', 'LineWidth', 2);

grid on;

axes(handles.axesBelow); % Switch to the axes below the image axes.

plot(1 : columns, horizontalSum, 'b-', 'LineWidth', 2);

grid on;

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

Start Hunting!