Matlab实现基于直方图均衡化的图像灰度变换

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)

猜你喜欢

转载自blog.csdn.net/qq_45083791/article/details/106807066