MATLAB: Is it possible to retrieve similar images by using this code

cbirhistogramimage processingImage Processing Toolbox

This is a code for calculating histogram error of a selected image to all images of a folder. I want to retrieve images which are similar to the selected image. Like: all the tree images of the folder, or bird images, or people images.
clc; % Clear the command window.
close all; % Close all figures (except those of imtool.)
clear; % Erase all existing variables. Or clearvars if you want.
fontSize = 25;
format long g;
% Read in a standard MATLAB gray scale demo image.
%folder = fullfile(matlabroot, '\toolbox\images\imdemos\new');
folder = fullfile('E:\4-2\Thesis_codes\similar');
baseFileName = 't5.jpg';
% 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 consol

%image=imread(fullfile(folder,srcFiles(i).name));
%figure, imshow(image);title ('The image you have selected is an image of jute');
if((f(i)>=0.009)&&(f(i) <=0.3))
f(i) %display the result to consol
image=imread(fullfile(folder,srcFiles(i).name));
figure, imshow(image);
%promptMessage =sprintf('f=%f',f(i));
end
end
Can anyone please help me???

Best Answer

No, there is a lot more to CBIR than similarity of histograms. Imagine you had an image of a bird and you took the pixels and rearranged them. Let's say that you sorted them and rearranged them into a ramp or gradient from one color to another. It would look like a smooth image - nothing at all like the original image of a bird - yet it would have the very same histogram of the bird image. Your code would return that image as being similar to a bird. That is probably not what you'd want. CBIR is a complicated and rapdily evolving subject that tags each image in the database with lots of information. You should do a search on CBIR to learn about this subject. You'll see that there's no way it can be done with a short, 100-line long MATLAB script.