②计算每个灰度值像素的频率,并计算累计频率(计算原始直方图的概率,计算直方图概率的累加值)
③将图像进行映射, 图像的灰度值=图像原来灰度值*累计频率(根据公式求取像素映射关系,灰度映射 )
代码块及效果
clear all; %清除Matlab缓存数据
close all;
clc;
f=imread('F:\暗通道图像去雾matlab\图像去雾程序MATLAB\迷雾1.png');
f=rgb2gray(f);
subplot(221),imshow(f),title('原灰度图');
subplot(222),imhist(f),title('原灰度图像直方图');
g=histeq(f);
subplot(223),imshow(g),title('直方图均衡化后图');
subplot(224),imhist(g),title('均衡化后直方图');
①将原始图片划分成不重叠的子块,在每个子块内做直方图处理,该方法简单但输出图像会有块效应;
②类似模板卷积的方式,以待处理的点为中心,取其邻域为子块,在子块内做直方图处理,处理结果仅映射到该点可以消除块效应,但需要对每个点计算一次直方图处理,效率低;
③前两种方法的结合版,不再逐像素移动,步长小于子块宽度以确保两个相邻子块有重叠;每个子块做直方图映射后的结果赋值给子块内所有点,这样每个点会有多次赋值,最终的取值为这些赋值的均值;
如果仅仅需要一个结果,可以直接使用matlab中的adapthisteq()函数。函数adapthisteq()只能用来处理灰度图,如果要处理彩色图像,则需要结合自己编写的代码来完成。
clear all; %清除Matlab缓存数据
close all;
clc;
img=imread('F:\暗通道图像去雾matlab\图像去雾程序MATLAB\迷雾1.png');
figure,
subplot(1,2,1),imshow(img);title('原图');
if length(size(img))>2
rimg = img(:,:,1);
gimg = img(:,:,2);
bimg = img(:,:,3);
resultr = adapthisteq(rimg);
resultg = adapthisteq(gimg);
resultb = adapthisteq(bimg);
result = cat(3, resultr, resultg, resultb);
subplot(1,2,2),imshow(result);title('CLAHE处理后');
end
adapthisteq()参数对图像的影响:
clear all; %清除Matlab缓存数据
close all;
clc;
g=imread('F:\暗通道图像去雾matlab\图像去雾程序MATLAB\迷雾2.png');
f=rgb2gray(g)
subplot 221;imshow(f);title('(a)原灰度图像');
g1=adapthisteq(f); subplot 222;imshow(g1);
title('(b)使用adapthisteq默认值[8 8]');
g2=adapthisteq(f,'NumTiles',[25 25]);
subplot 223;imshow(g1);
title('(c)NumTiles置为[25 25]的结果');
g3=adapthisteq(f,'NumTiles',[25 25],'ClipLimit',0.05);
subplot 224;imshow(g1);
title('(d)使用这一小片数量且ClipLimit=0.05');
文章来源:https://www.toymoban.com/news/detail-810603.html
如有错误,还请指正。❤文章来源地址https://www.toymoban.com/news/detail-810603.html
到了这里,关于matlab几种直方图均衡化方法学习笔记(HE、AHE、CLAHE附代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!