图像增强
概述:图像增强与图像复原是不同的,图像增强所要达到的目的是突出感兴趣的目标,而图像复原则是最大限度的恢复到原始图像,比如在采集时混杂入了噪声的图像,图像增强可以用灰度变换,即灰度值的大小的变换,也可以用中值滤波、频域滤波等。它们的效果可能更倾向于人的主观,如灰度变换后,感兴趣的目标变清晰了(变亮了),中值滤波使图像更平滑(不分析降质原因,增强了视觉效果),频域滤波能使边缘变清晰,但它们的结果都不一定为了去接近原始图像。
F = imadjust(i,stretchlim(i),[0 1]);
imadjust在数字图像处理中用于进行图像的灰度变换(调节灰度图像的亮度或彩色图像的颜色矩阵)。
函数原型:J =imadjust(I,[low_in; high_in],[low_out; high_out])
stretchlim(i)返回两个值的数组,指定归一化后的最大和最小灰度值
F是将灰度图像i的灰度值扩展到整个灰度值空间所得到的图像。
imhist(F);
g=histeq(F,nlev);
g=histeq(F,hspec);
g=adapthisteq(F);
g = imfilter(f, w, filtering_mode, boundary_options, size_options)
f为输入图像,w为滤波掩模,g为滤波后图像。filtering_mode用于指定在滤波过程中是使用“相关”还是“卷积”。boundary_options用于处理边界充零问题,边界的大小由滤波器的大小确定。
h = fspecial(type,parameters);
用于创建预定义的滤波算子
type制定算子类型,parameters指定相应的参数
B = medfilt2(A, [m n]);
B为输出图像,mn指定邻域大小
B=ordfilt2(A,order,domain);
对图像A作顺序统计滤波。参数A为输入图像矩阵,order为序号,domain为滤波窗口。即对图像A中大小为domain矩阵大小内的非零像素值进行升序排序,取第order个值作为输出像素值。它的滤波概念是中值滤波的推广,中值滤波是对于给定的n个数值{al ,a2,…,an},将它们按大小顺序排列,取中间的那个值作为滤波器的输出。而在ordfilt2函数中的二维顺序统计量滤波将n个非零数值按小到大排序后处于第k个位置的元素作为滤波器的输出。
%灰度图的同态滤波
clear;
close all;
[file,filepath]=uigetfile('*');
file=fullfile(filepath,file);
I0=rgb2gray(imread(file));
I=double(I0);
[M,N]=size(I);
rL=0.9;
rH=2;%可根据需要效果调整参数
%rL< 1, rH >1,控制滤波器幅度的范围
c=2;
%c为一个常数,控制滤波器的形态,即从低频到高频过渡段的陡度(斜率),其值越大,斜坡带越陡峭
d0=10;
%d0为照度-反射分解
I1=log(I+1);%取对数
FI=fft2(I1);%傅里叶变换
n1=floor(M/2);
n2=floor(N/2);
D=zeros(M,N);
H=zeros(M,N);
for i=1:M
for j=1:N
D(i,j)=((i-n1).^2+(j-n2).^2);
H(i,j)=(rH-rL).*(exp(c*(-D(i,j)./(d0^2))))+rL;%高斯同态滤波
end
end
I2=ifft2(H.*FI);%傅里叶逆变换
I3=real(exp(I2));
Min = min(min(I3));
Max = max(max(I3));
I3=(I3-Min)/(Max-Min);
I3=im2uint8(I3);
imgs=[I0,I3];
imshow(imgs);
%基于同态滤波与颜色空间转换处理的图像增强
clear;
close all;
[name,path] = uigetfile('*');
file = strcat(path,name);
img=imread(file);
X=double(img);
I=rgb2hsv(X);
H=I(:,:,1);
S=I(:,:,2);
V=I(:,:,3);
% 构造一个高斯滤波器
f_high = 1.0;
f_low = 0.8;
% 得到一个高斯低通滤波器
gauss_low_filter = fspecial('gaussian', [7 7], 1.414);
matsize = size(gauss_low_filter);
% 由于同态滤波是要滤出高频部分,
% 所以得把这个低通滤波器转换成一个高通滤波器.
% f_high 和 f_low 是控制这个高通滤波器形态的参数.
gauss_high_filter = zeros(matsize);
gauss_high_filter(ceil(matsize(1,1)/2) , ceil(matsize(1,2)/2)) = 1.0;
gauss_high_filter = f_high*gauss_high_filter - (f_high-f_low)*gauss_low_filter;
% 利用对数变换将入射光和反射光部分分开
log_img = log(double(V)+eps);
% 将高斯高通滤波器与对数转换后的图象卷积
high_log_part = imfilter(log_img, gauss_high_filter, 'symmetric', 'conv');
% 由于被处理的图象是经过对数变换的,再用幂变换将图象恢复过来
high_part = exp(high_log_part);
minv = min(min(high_part));
maxv = max(max(high_part));
% 得到的结果图象
temp=(high_part-minv)/(maxv-minv);
imgs=[uint8(V),uint8(temp*255)];
imshow(imgs);
% pause;
% S=adapthisteq(S)*2.1;
% HSV3(:,:,1)=H; %保留H不变,开始合成
% HSV3(:,:,2)=S;
% HSV3(:,:,3)=temp;
% rgb2=hsv2rgb(HSV3); %转换回RGB空间
% imshow(rgb2); title('同态滤波图像');
顶帽变换、底帽变换等等
S = decorrstretch(A);
[D,T,L] = imreducehaze(X);
降低RGB或灰度图像中的雾