[matlab]直方图均衡化

本文用来描述matlab版和自己写的区别,其中自己写的是按照 数字图像处理 冈萨雷斯 书中提到的公式。


MATLAB自带有直方图均衡化的函数:histeq

用法为:略


代码如下:

% 用来直方图均衡化【自己写】
clc;clear all;close all
I = imread('汤唯1.jpg');
I1 = rgb2gray(I);
[height,width] = size(I1);
[vPer ~] = imhist(I1);
vPerCum = cumsum(vPer);
vNew = (vPerCum/(height*width));
I2 = zeros(height,width);
for i = 0:255
	I2(I1==i) = vNew(i+1);
end
figure;
subplot(2,3,1),imshow(I1);title('原图')
subplot(2,3,4),bar(vPer);title('原图  直方图');xlim([0 255])
subplot(2,3,2),imshow(I2);title('原图  均衡化')
subplot(2,3,5),bar(vPer2);title('均衡化  直方图');xlim([0 255])
%% MATLAB自带的直方图均衡化函数histeq
I4 = histeq(I1);
[vPer4 ~] = imhist(I4);
subplot(2,3,3),imshow(I4);title('原图  自带函数')
subplot(2,3,6),bar(vPer4);title('自带函数  直方图');xlim([0 255])
%% 结论:
% 经过对比发现,MATLAB自带的直方图均衡化函数,默认为每4个灰度级取一个点,所以对于256的图像,为64个点;
% 如果修改为 I4 = histeq(I1,256),则与自己所写完全相同


运行结果如下:

[matlab]直方图均衡化_第1张图片

以上仅供各位学习,有问题,欢迎讨论,有建议,欢迎指导。[email protected]

你可能感兴趣的:(图像处理,图像处理,直方图,直方图均衡化,matlab)