MATLAB: How to equalize histogram of two images

equalizationhistogram

clc
close all
clear all
img1 = imread('img2.jpg');
img2 = imread('img1.jpg');
subplot(3,2,1);
imshow(img1);
title('First Image');
subplot(3,2,2);
imhist(rgb2gray(img1));
title('histogram of First image');
subplot(3,2,3);
imshow(img2);
title('Second Image');
subplot(3,2,4);
imhist(rgb2gray(img2));
title('histogram of Second image');
% how to equalize the histogram of img1 and img2 ? getting error here
a = histeq(rgb2gray(img1,img2));
subplot(3,2,5);
imshow(a);
title('histogram equalize')
% how to equalize the histogram of img1 and img2 ?

Best Answer

You could try imhistmatch(), but as you can see below, it doesn't do such a great job:
testImage = imread('moon.tif');
subplot(2, 3, 1);
imshow(testImage);
refImage = imread('cameraman.tif');
subplot(2, 3, 2);
imshow(refImage);
matchedImage = imhistmatch(testImage, refImage);
subplot(2, 3, 3);
imshow(matchedImage);
% Plot histograms
subplot(2, 3, 4);
imhist(testImage);
subplot(2, 3, 5);
imhist(refImage);
subplot(2, 3, 6);
imhist(matchedImage);
If you really want to do it right, you have to employ a few tricks (adding noise, sorting, randomly picking, etc.). I employ these tricks in my File Exchange submission which will match any histogram to any other histogram regardless of the shape.
Related Question