• 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表示蓝色。

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

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

    运行结果:

    (3)图像的标准差

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

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

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

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

    运行结果:

     (4)图像的相关系数

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

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

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

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

    运行结果:

     (5)图像的等高线

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

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

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

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

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

    运行结果:

     2.空域滤波

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

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

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

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

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

    运行结果:

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

     

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

     (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 相同的中心部分。

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

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

    运行结果:

     

    (3)二维线性数字滤波

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

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

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

     运行结果:

     

    (4)非线性空域滤波

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

    (5)中值滤波

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

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

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

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

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

    运行结果:

     (6)排序滤波

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

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

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

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

    运行结果:

     (7)自适应滤波

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

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

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

    运行结果:

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

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

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

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

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

    运行结果:

     

  • 相关阅读:
    揭秘华为云GaussDB(for Influx)最佳实践:hint查询
    CSS3 —— CSS3 基础(边框、渐变、文本效果)
    【测开求职】面试题:计算机网络 精简版整理
    python+flask计算机毕业设计基于微信小程序的首饰商城系统(程序+开题+论文)
    嵌入式软件工程师面试题——2025校招社招通用(十五)
    阿里最新秋招面经,腾讯/美团/字节 Java中高级面试题
    Latex文字加颜色的三种办法
    【ML-SVM案例学习】案例一:对鸢尾花数据进行SVM分类(附源码)
    HP电脑主机清除BIOS密码
    Node.js中的单线程服务器
  • 原文地址:https://blog.csdn.net/weixin_52135595/article/details/126938012