Matlab实现基于直方图均衡化的图像灰度变换
效果展示(实验测试用图,侵删)
拔群有没有!!!
以下为实现流程
灰度统计函数
nums.m
%传参为图像灰度量化等级,图像矩阵;
%返回灰度频数,频率
function [times,frequ] = nums(n,Img)
times = zeros(1,n);
[Wide,High]=size(Img);
N = Wide*High;
%统计频数
for i = 1:Wide
for j = 1:High
times(Img(i,j)+1) = times(Img(i,j)+1)+1;
end
end
%频率
frequ = times./N;
end
主函数 main.m
clc
ImgPath = 'test.png';
%上次写的彩图转化黑白图函数
Img = rgb2gray(imread(ImgPath));
[Wide,High] = size(Img);
N = Wide*High;
n = 256;
%得到原图的像素频数,频率
[times0,frequ0]= nums(n,Img);
%得到灰度累计直方图
add_frequ = zeros(1,n);
add_frequ(1) = frequ0(1);
for i = 2:n
add_frequ(i) = add_frequ(i-1) + frequ0(i);
end
%绘制转换图
newphoto = zeros(Wide,High);
%像素转化函数f_x
f_x = add_frequ.*n;
for i = 1:Wide
for j = 1:High
newphoto(i,j) = f_x(Img(i,j)+1);
end
end
newphoto = uint8(newphoto);
[times1,frequ1] = nums(n,newphoto);
%展示
figure(1)
subplot(1,2,1)
imshow(Img)
subplot(1,2,2)
imshow(newphoto)