matlab 彩色图像滤波

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab 彩色图像滤波相关的知识,希望对你有一定的参考价值。

以前只做过单波段灰度图像的滤波,像什么中值滤波,PGF非线性滤波,那么对多波段的图像应该怎么滤波呢?比如RGB图像,是分别对每个波段滤波,再把滤波后的RGB波段组合成图像吗?我觉得这样不合理,不知道现在正确的方法是什么?怎样才能综合考虑每一个波段?请大家说一说。

I=imread('1.jpg');

I1=imnoise(I,'salt & pepper',0.05);

figure(3);

subplot(121);

imshow(I1);title('椒盐噪声');

subplot(122); 

J1=I1(:,:,1);

J2=I1(:,:,2);

J3=I1(:,:,3);

H1=medfilt2(J1);   %中值滤波

H2=medfilt2(J2);

H3=medfilt2(J3);

H(:,:,1)=H1;

H(:,:,2)=H2;

H(:,:,3)=H3;

imshow(H);title('中值滤波处理后图'); %显示中值滤波后的图像

你看我刚做的实验,就是三维分开搞,再组合在一起,效果蛮好。。。

参考技术A i=imread('lena.bmp');
inf=imfinfo('lena.bmp')
figure,imshow(I)
X=grayslice(I,64);
imshow(X,pink(64))
load trees
figure,image(10,10,X)
imwrite(X,map,'trees.bmp');
imfinfo('trees.bmp')
figure,imshow(X,map)
BW=im2bw(X,map,0.6);
figure,imshow(BW)
I=imread('lena.bmp');
inf=imfinfo('lena.bmp')
figure,imshow(I)
X=grayslice(I,64);
figure,imshow(X,pink(64))
A=imread('lena.bmp');
imshow(A)
B=fftshift(fft2(A));
figure;
imshow(log(abs(B)),[8,10])
clc;
clear all;
I=imread('lena.tif');
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %用中值滤波,多维滤波,使用中心为-4,-8的拉普
% %拉斯滤波器,高斯低通滤波,拉普拉斯滤波器进行滤波处理
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure;%figure1
subplot(2,2,1);
imshow(I);
title('原始图像');
J=imnoise(I,'salt & pepper',0.04);%加椒盐噪声
title('加椒盐噪声');
subplot(2,2,2);
imshow(J);
K=medfilt2(J,[4,4])%进行中值滤波;
subplot(2,2,3);
imshow(K);
title('进行中值滤波');
h=ones(3,3)/9;%多维滤波
w=h;
g=imfilter(I,w,'conv','replicate')
subplot(2,2,4);
imshow(g);
title('多维滤波');
%使用中心为-4,-8的拉普拉斯滤波器,
w4=[1 1 1;
1 -4 1;
1 1 1];
w8=[1 1 1;
1 -8 1;
1 1 1];
f=im2double(I);
g4=f-imfilter(f,w4,'replicate');
g8=f-imfilter(f,w8,'replicate');
imshow(f);
figure;%figure2
subplot(1,2,1);
imshow(g4);
title('中心为-4的拉普拉斯滤波');
subplot(1,2,2);
imshow(g8);
title('中心为-8的拉普拉斯滤波');
h3=fspecial('gaussian',[3,3],0.5);%高斯低通滤波
figure;%figure3
B4=filter2(h3,I);
subplot(1,2,1);
imshow(B4,[ ]);
title('高斯低通滤波');
h4=fspecial('laplacian',0);%使用拉普拉斯滤波器
B5=filter2(h4,I);
subplot(1,2,2);
imshow(B5,[ ]);
title('拉普拉斯滤波器');
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %从空域的角度进行亮度变换
% %把灰度等级是10-100的变化到10-255
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure;%figure4
subplot(2,2,1);
imshow(I);
title('原始图像');
J2=imadjust(I,[],[],0.5);% 增强低灰度级
subplot(2,2,2);
imshow(J2);
title('增强低灰度级');
J3=imadjust(I,[ ],[ ],2);%增强高灰度级
subplot(2,2,3);
imshow(J3);
title('增强高灰度级');
a1=100/255;%把灰度等级是10-100的变化到10-255
a2=255/255;
a3=10/255;
J2=imadjust(I,[a3,a1],[a3,a2],[]);
subplot(2,2,4);
imshow(J2);
title('把灰度等级是10-100的变化到10-255');
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %从频域的角度进行亮度变换
% %fft2
% %由于能量主要集中在低频部分
% %所以对低频进行处理可以得到理想的效果
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
I=imread('lena.tif');
up=0.5;%设置处理频率上限
down=0.09%%设置处理频率下限
figure;%figure5
subplot(421);
imshow(I);
title('原始图像');
f=double(I);
subplot(4,2,3);
imshow(log(abs(f)),[]);
title('unit8转化为double');
g=fft2(f);
g=fftshift(g);
subplot(4,2,5);
imshow(log(abs(g)),[]);
title('FFT2变化后的图像');
[M,N]=size(g);% 转换数据矩阵
y1=max(max(abs(g)));%求出最大频率
y2=min(min(abs(g)));%%求出最小频率
y3=(y1-y2)*up+y2;%设置滤波上限
y4=(y1-y2)*down+y2;%%设置滤波下限
for i=1:M
for j=1:N
if (abs(g(i,j))<y4)
g(i,j)=g(i,j)^1.1;%对低频部分进行灰度增强
end
end
end
result=ifftshift(g);
J2=ifft2(result);
J3=uint8(abs(J2));
subplot(427);
imshow(J3,[ ]);
title('频域处理后的图像');
subplot(422)
imhist(I,64);
subplot(424)
imhist(f,64);
subplot(426)
imhist(g,64);
subplot(428)
imhist(J3,64);
参考技术B 刚刚接触到MATLAB图像滤波。想对一张彩色的BMP的图像进行中值滤波,求代码。

图像增强基于matlab HSI+同态滤波彩色图像增强含Matlab源码 1515期

一、 图像增强技术简介

1 图像增强
图像增强是对图像的某些特征,如边缘、轮廓、对比度等进行强调或锐化,以便于显示、观察或进一步分析与处理。通过对图像的特定加工,将被处理的图像转化为对具体应用来说视觉质量和效果更“好”或更“有用”的图像。
图像增强是最基本最常用的图像处理技术,常用于其他图像处理的预处理阶段。

(1)高通平滑、低通锐化;平滑模糊、锐化突出图像细节
(2)滤波器还有带通、带阻等形式
(3)根据噪声(椒盐噪声、高斯噪声…)的不同,选用不同的滤波
(4)邻域有4-邻域、对角邻域、8-邻域,相对应的有邻接,即空间上相邻、像素灰度相似
(5)图像边缘处理:忽略不处理、补充、循环使用
(6)目前尚未图像处理大多基于灰度图像

2 同态滤波
同态滤波采用的是照射-反射模型, 即通过同时减小图像的灰度范围和增强图像的对比度来对图像增强. 图像可表示为照射i(x,y)和反射r(x,y) 两部分的乘积

将其变换到对数域, 并进行傅里叶变换得

式中: I(u,v)和R(u,v)分别是In(i(x,y))和In(r(x,y)) 的傅里叶变换, 借助滤波函数H(u,v)对F(u,v)进行滤波, 可以分离得到入射分量和反射分量

滤波后, 进行傅里叶逆变换得

对式(25)取指数后, 得到滤波后的图像

3 Retinex增强处理
基于全局直方图、局部直方图的图像去雾算法在理论及实现上比较简单,能起到一定的去雾处理效果。为了进行对比, 实验中采取了Retin ex图像增强算法来进行对比, 该算法可以平衡图像灰度动态范围压缩、图像增强和图像颜色恒常三个指标,能够实现对含雾图像的自适应性增强。因此, Retin ex增强处理通过对RGB图像的R、G、B三层通道分别应用Retin ex算法进行处理, 再整合到新的图像的方式来进行。

4 图像的直觉模糊增强算法
模糊范数在模糊集的理论体系中占有重要地位,YAGER通过“最大-最小”算子定义了模糊范数

HAMACHER通过纯代数运算定义模糊范数

对于一幅大小为M×N的灰度图像B(彩色图像取其亮度),其灰度值范围为[0,L-1],则图像B的模糊域的隶属函数可定义为

式中:gmin和gmax分别为图像灰度值的最小值和最大值;gi j为像素(i,j)的灰度值。
直觉模糊集:设X是一个给定论域,则X上的一个直觉模糊集A为
A={<x,μA(x),γA(x)>|x∈X} (6)
式中:μA(x)∈[0,1]为隶属函数,γA(x)∈[0,1]为非隶属函数,且对于A上的所有x∈X,0<μA(x)+γA(x)≤1,πA(x)=1-μA(x)-γA(x)为犹豫度。

式中:0≤α≤1,α用来调节隶属度μ(gi j)本身包含的模糊性,经实验验证,当0.6<α≤0.8时,图像增强效果较好。
利用式(4)的Hamacher模糊范数,可合成隶属度

直觉模糊增强图像的步骤为: 1) 通过式(5)计算图像每个像素点的隶属度;2) 通过式(7)和式(8)计算图像每个像素点的隶属度的下限和上限;3) 通过式(9)将图像每个像素点的隶属度的下限和上限合成为像素点的隶属度;4) 通过式(10)计算图像每个像素点的隶属度对应的灰度值。

二、部分源代码

close all;clear;clc
addpath('model');
addpath('src');


%  读取图像
I = imread('4.1.01.tiff');
en = BlockAvEn(I,8);

% 全局同态滤波
rgbim0 =  GlobalHomo(I,1.2,0.5,50,1);
en0 = BlockAvEn(rgbim0,8);

% 局部同态滤波
rgbim1 = LocalHomo(I,1.2,0.5,4,1,8);
en1 = BlockAvEn(rgbim1,8);

% 分块同态滤波 
rgbim2 = BlockHomo(I,1.2,0.5,4,1,8);
en2 = BlockAvEn(rgbim2,8);

figure(1)
subplot(1,4,1)
imshow(I);
title(['原始图像:',num2str(en)])

subplot(1,4,2)
imshow(rgbim0);
title(['全局同态滤波:',num2str(en0)])

subplot(1,4,3)
imshow(rgbim1);
title(['局部同态滤波:',num2str(en1)])

subplot(1,4,4)
imshow(rgbim2);
title(['分块同态滤波:',num2str(en2)])
function en = BlockAvEn(I,block)
%局部平均信息熵
% en = BlockAvEn(I,block)
% I:输入图像
% block:分块大小
en = 0;
[row,col,channel] = size(I);
% 块的大小为Mb*Nb
Mb = block; Nb = block;
rb = floor(row/Mb); cb = floor(col/Nb);
for c = 1:channel
    im = I(:,:,c);
    for i =1:rb
        for j = 1:cb
            temp = im((i-1)*Mb+1:i*Mb , (j-1)*Nb+1:j*Nb);
            en = en + entropy(temp);
        end
    end
end
en = en/(rb*cb*channel);
end

三、运行结果

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

以上是关于matlab 彩色图像滤波的主要内容,如果未能解决你的问题,请参考以下文章

matlab画图像的像素强度分布

怎样用matlab进行图像滤波处理

图像滤波图像二维双边高斯滤波matlab源码

《数字图像处理 MATLAB版》学习笔记

图像去噪基于matlab高通+低通+带通+方向滤波器图像滤波含Matlab源码 1209期

图像修复基于空域滤波图像复原matlab源码含GUI