Is it possible to retrieve similar images by using this code?

Illustration
Shaila parvin - 2024-01-17T12:33:09+00:00
Question: Is it possible to retrieve similar images by using this code?

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  

Expert Answer

Profile picture of John Williams John Williams answered . 2025-11-20

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.

 


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!