MATLAB图像处理学习——图像的统计特性+空域滤波

目录

1.图像的统计特性

 (1)概论

 (2)图像均值

 (3)图像的标准差

 (4)图像的相关系数

 (5)图像的等高线

 2.空域滤波

 (1)线性平均滤波(领域相卷积计算)

 (2)线性平均滤波(二维卷积计算)

 (3)二维线性数字滤波

 (4)非线性空域滤波

 (5)中值滤波

 (6)排序滤波

 (7)自适应滤波

 (8)拉普拉斯算子锐化滤波器


1.图像的统计特性

(1)概论

在MATLAB中,灰度图像是一个二维矩阵,RGB彩色图像是三维矩阵。图像作为矩阵,可以计算其平均值、方差和相关系数等统计特征。

(2)图像均值

采用函数mean2()计算矩阵的均值,对于RGB图像来说,调用方法如下:

J=mean2(I):获得图像I所有颜色值的平均值

J=mean2(I (: , : , N) ):获得每种颜色值的平均值。N参数若为1表示红色,为2表示绿色,为3表示蓝色。

代码(计算灰度图像和彩色图像的平均值):

close all;clear all;clc;
I=imread('D:/resource_photo/8.jpg');
J=rgb2gray(I);
gray=mean2(J);
rgb=mean2(I);
r=mean2(I(:,:,1));
g=mean2(I(:,:,2));
b=mean2(I(:,:,3));
figure;
subplot(121);imshow(uint8(I));
subplot(122);imshow(uint8(J));

运行结果:

MATLAB图像处理学习——图像的统计特性+空域滤波_第1张图片

(3)图像的标准差

在matlab中,采用函数std()来计算向量的标准差,通过std2()来计算矩阵的标准差

eg.灰度图像的像素为二维矩阵A,则该图像的标准差是std2(A).

代码(计算灰度图像的标准差):

close all;clear all;clc;
I=imread('D:/resource_photo/8.jpg');
J=rgb2gray(I);
s1=std2(J); %计算标准差
K=histeq(J); %直方图均衡化
s2=std2(K);
figure;
subplot(121);imshow(uint8(J));
subplot(122);imshow(uint8(K));

运行结果:

MATLAB图像处理学习——图像的统计特性+空域滤波_第2张图片

 (4)图像的相关系数

采用函数corr2()计算两个灰度图像的相关系数,调用方式如下:

r=corr2(A,B):其中A和B为大小相等的二维矩阵,r为两个矩阵的相关系数。

代码(计算两个灰度图像的相关系数):

close all;clear all;clc;
I=imread('D:/resource_photo/8.jpg');
J=rgb2gray(I);
K=medfilt2(J); %中值滤波
r=corr2(J,K); %计算相关系数
figure;
subplot(121);imshow(uint8(J));
subplot(122);imshow(uint8(K));

运行结果:

MATLAB图像处理学习——图像的统计特性+空域滤波_第3张图片

 (5)图像的等高线

在matlab中通过函数imcontour()可以绘制灰度图像的等高线,调用方法如下:

imcontour(I):该函数中I为灰度图像的二维数据矩阵,绘制灰度图像的等高线。

imcontour(I,n):该函数设置等高线的条数为n,如果不指定n,该函数会自动选取n。

代码(计算灰度图像的等高线):

close all;clear all;clc;
I=imread('D:/resource_photo/8.jpg');
J=rgb2gray(I);
figure;
subplot(121);imshow(J);
subplot(122);imcontour(J,3);

运行结果:

MATLAB图像处理学习——图像的统计特性+空域滤波_第4张图片

 2.空域滤波

(1)线性平均滤波(领域相卷积计算)

  线性平均滤波是一种最常用的线性空域滤波。线性平均滤波实际是一种低通滤波,信号的低频部分通过,阻止高频部分通过。由于图像的边缘处于高频部分,因此线性平均滤波后,会造成图像边缘的模糊。

  在进行图像的滤波时,可以采用模板和图像的领域相卷积的方法。使用函数imfilter()

代码(通过函数imfilter对图像进行平滑):

close all;clear all;clc;
I=imread('D:/resource_photo/8.jpg');
J=imnoise(I,'salt & pepper',0.02); %加入椒盐噪声
h=ones(3,3)/5;
h(1,1)=0; h(1,3)=0;
h(3,1)=0; h(1,3)=0;
K=imfilter(J,h); %图像的滤波
figure,imshow(I);
figure,imshow(J);
figure,imshow(K);

运行结果:

(如上两图,左为原图,右为加入椒盐噪声后的图像)

MATLAB图像处理学习——图像的统计特性+空域滤波_第5张图片 

 (上图为对加入噪声图像使用线性平均滤波后的图像)

 (2)线性平均滤波(二维卷积计算)

在matlab中,使用conv2()进行二维卷积计算,调用方式如下:

J = conv2(A,B) :返回矩阵 A 和 B 的二维卷积。

J = conv2(u,v,A): 首先求 A 的各列与向量 u 的卷积,然后求每行结果与向量 v 的卷积。

J = conv2(A,B,shape) :根据 shape 返回卷积的子区。例如,C = conv2(A,B,'same') 返回卷积中大小与 A 相同的中心部分。

代码(使用二维卷积函数对图像进行平滑):

close all;clear all;clc;
I=imread('D:/resource_photo/7.jpg');
I=rgb2gray(I);
I=im2double(I);
J=imnoise(I,'gaussian',0,0.01); %加入高斯噪声
h=ones(3,3)/9;%产生模板
K=conv2(J,h,'same'); %对图像进行二维卷积计算(滤波)
figure,imshow(I);
figure,imshow(J);
figure,imshow(K);

运行结果:

 MATLAB图像处理学习——图像的统计特性+空域滤波_第6张图片

(3)二维线性数字滤波

可以使用filter2()进行二维线性数字滤波,采用函数fspecial()产生滤波器模板。

代码(使用conv2()对图像进行平滑):

close all;clear all;clc;
I=imread('D:/resource_photo/7.jpg');
I=rgb2gray(I);
I=im2double(I);
J=imnoise(I,'gaussian',0,0.01); %加入高斯噪声
h=fspecial('average',3);%生成3*3模板
K=filter2(h,J); %对图像进行二维卷积计算(滤波)
figure,imshow(I);
figure,imshow(J);
figure,imshow(K);

 运行结果:

 MATLAB图像处理学习——图像的统计特性+空域滤波_第7张图片

(4)非线性空域滤波

非线性空域滤波主要包括中值滤波、顺序统计滤波和自适应滤波等。

(5)中值滤波

中值滤波是一种保护边缘的非线性图像平滑方法。

二维中值滤波用于图像的增强。中值滤波可以去除图像中的椒盐噪声,平滑效果优于均值滤波,在抑制噪声的同时还能够保持图像的边缘清晰。

在matlab中,采用函数medfilt2()进行图像的二维中值滤波。

代码(对图像进行中值滤波):

close all;clear all;clc;
I=imread('D:/resource_photo/7.jpg');
I=rgb2gray(I);
I=im2double(I);
J=imnoise(I,'salt & pepper',0.03); %加入椒盐噪声
K=medfilt2(J); %对图像进行二维中值滤波
figure;
subplot(131);imshow(I);%原始图像
subplot(132);imshow(J);%加入噪声图像
subplot(133);imshow(K);%滤波处理后图像

运行结果:

MATLAB图像处理学习——图像的统计特性+空域滤波_第8张图片

 (6)排序滤波

在matlab中采用ordfilt2()方法进行排序滤波。

(函数medfilt2()进行滤波时,选取的是排序后的中值,所以当调用方法为J=ordfilt2(I,median(1:m*n),[m,n])时,相当于中值滤波)

代码(对图像进行排序滤波):

close all;clear all;clc;
I=imread('D:/resource_photo/7.jpg');
I=rgb2gray(I);
I=im2double(I);
J=imnoise(I,'salt & pepper',0.03); %加入椒盐噪声
K1=ordfilt2(J,1,true(5)); %对图像进行排序滤波(选取排序后第一个作为输出结果)
K2=ordfilt2(J,25,true(5));%选取排序后第25个作为输出结果
figure;
subplot(131);imshow(J);%原始图像
subplot(132);imshow(K2);
subplot(133);imshow(K1);%滤波处理后图像

运行结果:

MATLAB图像处理学习——图像的统计特性+空域滤波_第9张图片

 (7)自适应滤波

在matlab中使用wiener2()根据图像的噪声进行自适应滤波;根据图像的局部方差来调整滤波器的输出。

代码(对图像进行自适应滤波):

close all;clear all;clc;
I=imread('D:/resource_photo/7.jpg');
I=rgb2gray(I);
I=im2double(I);
J=imnoise(I,'gaussian',0,0.1); %加入椒盐噪声
K=wiener2(J,[5 5]);%对图像进行自适应滤波
figure;
subplot(131);imshow(I);%原始图像
subplot(132);imshow(J);%加入噪声图像
subplot(133);imshow(K);%滤波处理后图像

运行结果:

MATLAB图像处理学习——图像的统计特性+空域滤波_第10张图片

 (8)拉普拉斯算子锐化滤波器

对于模糊的图像,通过锐化滤波器能够补偿图像的轮廓,让图像变得清晰。

锐化滤波器尝试用拉普拉斯算子。拉普拉斯算子比较适合用于改善因为光线的漫反射造成的图像模糊。

代码(对图像进行锐化滤波):

close all;clear all;clc;
I=imread('D:/resource_photo/7.jpg');
I=rgb2gray(I);
I=im2double(I);
h=[0,1,0;1,-4,1;0,1,0];%拉普拉斯算子
J=conv2(I,h,'same');%二维卷积
K=I-J;
figure;
subplot(121);imshow(I);%原始图像
subplot(122);imshow(K);%滤波处理后图像

运行结果:

MATLAB图像处理学习——图像的统计特性+空域滤波_第11张图片

 

你可能感兴趣的:(matlab,图像处理,学习,计算机视觉)