MATLAB: What is the mistale in the loop

for loopimage processingImage Processing Toolbox

I want to match the similarity of an image with all images of a folder. I compare the histogram error between to images using loop. But I've done some mistakes to code the loop. So, my program doesn't answer anything. The code is:
a = imread('c.jpg'); %read an image
srcFiles = dir('similar\*.jpg'); %directory of the source folder
Im1=rgb2gray(a); % convert images to type double (range from from 0 to 1 instead of from 0 to 255)
Im1 = im2double(Im1); % Calculate the Normalized Histogram
hn1 = imhist(Im1)./numel(Im1);
for i = 1 : length(srcFiles) % determins how many images are there in the folder,
filename = strcat('similar\',srcFiles(i).name);
Im2=rgb2gray(filename);
Im2 = im2double(Im2);
hn2 = imhist(Im2)./numel(Im2);
% Calculate the histogram error

f(i) = sum((hn1 - hn2).^2);% Calculate the histogram error
f %display the result to console
end
Can anyone please help me to correct the mistakes???

Best Answer

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 = 25;
% Read in a standard MATLAB gray scale demo image.
folder = fullfile(matlabroot, '\toolbox\images\imdemos');
baseFileName = 'cameraman.tif';
% Get the full filename, with path prepended.
fullFileName = fullfile(folder, baseFileName);
% Check if file exists.
if ~exist(fullFileName, 'file')
% File doesn't exist -- didn't find it there. Check the search path for it.
fullFileNameOnSearchPath = baseFileName; % No path this time.
if ~exist(fullFileNameOnSearchPath, 'file')
% Still didn't find it. Alert user.
errorMessage = sprintf('Error: %s does not exist in the search path folders.', fullFileName);
uiwait(warndlg(errorMessage));
return;
end
end
referenceGrayImage = imread(fullFileName);
% Get the dimensions of the image.
% numberOfColorBands should be = 1.
[rows, columns, numberOfColorBands] = size(referenceGrayImage);
if numberOfColorBands > 1
% It's not really gray scale like we expected - it's color.
% Convert it to gray scale by taking only the green channel.
referenceGrayImage = referenceGrayImage(:, :, 2); % Take green channel.
end
% Display the original gray scale image.

subplot(2, 2, 1);
imshow(referenceGrayImage, []);
title('Original Grayscale Image', 'FontSize', fontSize);
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);
% Give a name to the title bar.
set(gcf, 'Name', 'Demo by ImageAnalyst', 'NumberTitle', 'Off')
% Let's compute and display the histogram.
[pixelCount, grayLevels] = imhist(referenceGrayImage);
subplot(2, 2, 2);
bar(grayLevels, pixelCount);
grid on;
title('Histogram of original image', 'FontSize', fontSize);
xlim([0 grayLevels(end)]); % Scale x axis manually.
srcFiles = dir(fullfile(folder, '*.jpg')); %directory of the source folder
Im1 = im2double(referenceGrayImage); % Calculate the Normalized Histogram
hn1 = imhist(referenceGrayImage)./numel(referenceGrayImage);
for i = 1 : length(srcFiles) % determins how many images are there in the folder,
filename = fullfile(folder,srcFiles(i).name)
thisImage = imread(filename);
% Display the original gray scale image.
subplot(2, 2, 3);
imshow(thisImage);
title(filename, 'FontSize', fontSize);
drawnow;
Im2=rgb2gray(thisImage);
Im2 = im2double(Im2);
hn2 = imhist(Im2)./numel(Im2);
% Calculate the histogram error

f(i) = sum((hn1 - hn2).^2);% Calculate the histogram error
f(i) %display the result to console
promptMessage = sprintf('f=%f\nDo you want to Continue processing,\nor Cancel to abort processing?',f(i));
titleBarCaption = 'Continue?';
button = questdlg(promptMessage, titleBarCaption, 'Continue', 'Cancel', 'Continue');
if strcmpi(button, 'Cancel')
break;
end
end
Related Question