图像处理系列:

图像处理1-经典空间域增强——灰度映射

图像处理2-经典空间域增强——直方图均衡化

空域滤波

这里根据模板是线性的还是非线性的进行分类,分别根据《图像处理与分析教程》上的方法实现了线性的领域平均、自定义加权平均、高斯平均、线性锐化非线性的1-D中值滤波、2-D均值滤波、百分比滤波(最大、最小、中点)、非线性锐化、最大最小锐化,然后在主函数中进行测试。

一、线性滤波

1.空域线性滤波的代码

function [pic]=xxkylb(p,type,n,CX)if nargin<3%缺省滤波核为3n=3;endd=uint32(n/2)-1;%matlab uint会四舍五入!if strcmp(type,'JZLB')%均值滤波器K=ones(n,n);K=uint32(K);S=n*n;elseif strcmp(type,'JQPJZDY')%自定义均值滤波器,滤波核由CX导入K=CX;K=uint32(K);S=sum(K(:));elseif strcmp(type,'GSJQPJ')%高斯均值滤波器if  nargin<4%缺省σ为1sig=1;elsesig=CX;endK=zeros(n,n);gy=exp(double(-(((d)^2+(d)^2)/2*sig^2)))/(2*pi*sig^2);%右下角最小的参数,进行一个归一化for x=1:nfor y=1:nK(x,y)=exp(double((-(((x-d-1)^2+(y-d-1)^2)/2*sig^2))))/(2*pi*sig^2)/gy;%以距离值构造滤波核权术endendK=uint32(K);%转换为整形S=sum(K(:));elseif strcmp(type,'RH')%线性锐化K=CX;%模板为输入S=1;%设为1end[r,c]=size(p);mv=mean(p(:));iob=ones(r+2*d,c+2*d)*mv;%以均值填充边缘,方便计算iob((d+1):(d+r),(d+1):(d+c))=p;pic=uint8(zeros(r,c));for i=1:rfor j=1:ct=0;for k=1:nfor d=1:nt=t+K(k,d)*iob(i+k-1,j+d-1);%计算endendpic(i,j)=uint8(t/S);%换点endend
end

2.结果分析

a.线性空域滤波效果

测试代码

clear;clc
pic=imread('lena.BMP');
pic=rgb2gray(pic);
picJZ=xxkylb(pic,'JZLB');
a=[1 2 1;2 4 2;1 2 1];%一个自定义的均值模板
piczdy=xxkylb(pic,'JQPJZDY',3,a);
picGS=xxkylb(pic,'GSJQPJ');
b=[0 -1 0;-1 4 -1;0 -1 0];%一个自定义的锐化模板
picRH=xxkylb(pic,'RH',3,b);
figure(6)
set(gcf,'position',[100 100 1500 800]);
subplot(2,3,1)
imshow(pic)
xlabel('原图')
subplot(2,3,2)
imshow(picJZ)
xlabel('均值滤波')
subplot(2,3,3)
imshow(piczdy)
xlabel('自定义均值滤波')
subplot(2,3,4)
imshow(picGS)
xlabel('高斯滤波')
subplot(2,3,5)
imshow(picRH)
xlabel('线性锐化(3x3无边缘中心4对角-1)')%模板[0 -1 0;-1 4 -1;0 -1 0]
saveas(gcf,'线性空域滤波效果图.jpg')

效果图

图1 线性空域滤波效果图

首先这里变化比较明显的是线性锐化,可以看见图中只剩下lena的轮廓,但是也可以发现均值滤滤波和高斯滤波都将图片变得模糊了。

b.高斯滤波与均值滤波比较

测试代码:

figure(7)
subplot(2,2,1)
imshow(pic)
xlabel('原图')
subplot(2,2,2)
imshow(hdzh(pic-picJZ,'YZFQ',10))
xlabel('原图-均值滤波')
subplot(2,2,3)
imshow(hdzh(pic-piczdy,'YZFQ',10))
xlabel('原图-自定义均值滤波')
subplot(2,2,4)
imshow(hdzh(pic-picGS,'YZFQ',10))
xlabel('原图-高斯滤波')
saveas(gcf,'均值、高斯滤波比较.jpg')

这里做一个减法然后将其进行了阈值为10的阈值分切见图4.2),可以发现原图减去滤波后的图阈值分切后,能看到lena的轮廓,也就是均值、高斯滤波对图像的边缘都有虚化作用。

图2 验证均值滤波和高斯滤波存在的变化

c.高斯均值滤波滤波核大小讨论

然后我们再对均值、高斯滤波的滤波核大小和滤波效果进行讨论,我们取滤波核大小为3、7、11、15、19分别用均值和高斯滤波查看效果(见图3),可以看到随n的增大,画面更加平滑,但是画面的内容逐渐模糊,细节逐渐减少。下面继续讨论不同σ的高斯模板对对滤波的影响,取滤波核为7,从效果(见图4)可以发现,随着σ的增大,高斯加权越平均,图片细节损失越小,测试代码和结果如下。

figure(8)
set(gcf,'position',[100 100 2500 2500]);
subplot(3,5,3)
imshow(pic)
xlabel('原图')
for i=1:5subplot(3,5,5+i)imshow(xxkylb(pic,'JZLB',(i-1)*4+3))xlabel(strcat('均值,n=',num2str((i-1)*4+3)))subplot(3,5,10+i)imshow(xxkylb(pic,'GSJQPJ',(i-1)*4+3))xlabel(strcat('高斯,n=',num2str((i-1)*4+3)))
end
saveas(gcf,'均值高斯滤波核讨论.jpg')
figure(9)
subplot(3,3,1)
imshow(pic)
xlabel('原图')
for i=1:8subplot(3,3,i+1)imshow(xxkylb(pic,"GSJQPJ",7,256*0.1*i))xlabel(strcat('高斯(n=7),σ=',num2str(10*i),"%L"))
end
saveas(gcf,"高斯方差讨论.jpg")

图3 不同滤波核下高斯核滤波和均值滤波的差别

图4 不同方差下高斯核滤波的差别

二、非线性空域滤波

然后对非线性空域滤波进行讨论,其函数块如下。

function [pic]=fxxkylb(p,type,XS)[r,c]=size(p);if strcmp(type,'1-DZZ')%1-D中值滤波if nargin<3%对参数进行缺省,模板长度为5XS=2;endmc=mean(p(:));pic=uint8(zeros(r,c));ioc=ones(r,c+2*XS)*mc;%补全方便计算ioc(:,XS+1:c+XS)=p;for x=1:rfor y=1:ct=ioc(x,(y):(y+2*XS));pic(x,y)=uint8(median(t));%取出模板中的中间值endendelseif strcmp(type,'RH')%非线性锐化if nargin<3flag=1;elseflag=XS;endXS=3;d=uint32(XS/2)-1;mv=mean(p(:));iob=ones(r+2*d,c+2*d)*mv;iob((d+1):(d+r),(d+1):(d+c))=p;pic=uint8(zeros(r,c));GX=[-1,0,1;-1,0,1;-1,0,1];%对x的差分GY=[1,1,1;0,0,0;-1,-1,-1];%对y的差分if flag==1for i=1:rfor j=1:cgx=0;gy=0;for k=1:XSfor d=1:XSgx=gx+GX(k,d)*iob(i+k-1,j+d-1);%分别计算x y差分值gy=gy+GY(k,d)*iob(i+k-1,j+d-1);endendpic(i,j)=uint8((gx^2+gy^2)^0.5);%计算欧式距离endendelseif flag==2for i=1:rfor j=1:cgx=0;gy=0;for k=1:XSfor d=1:XSgx=gx+GX(k,d)*iob(i+k-1,j+d-1);%分别计算x y差分值gy=gy+GY(k,d)*iob(i+k-1,j+d-1);endendpic(i,j)=uint8(abs(gx)+abs(gy));%计算城区距离endendelsefor i=1:rfor j=1:cgx=0;gy=0;for k=1:XSfor d=1:XSgx=gx+GX(k,d)*iob(i+k-1,j+d-1);%分别计算x y差分值gy=gy+GY(k,d)*iob(i+k-1,j+d-1);endendpic(i,j)=uint8(max([gx gy]));%计算棋盘距离endendendelseif nargin<3%对模板大小进行缺省XS=3;endd=uint32(XS/2)-1;mv=mean(p(:));iob=ones(r+2*d,c+2*d)*mv;iob((d+1):(d+r),(d+1):(d+c))=p;pic=uint8(zeros(r,c));if strcmp(type,'2-DZZ')%2-D中值for x=1:rfor y=1:ct=[iob(x,y:(y+2*d)) iob(x+1,y:(y+2*d)) iob(x+2,y:(y+2*d))];pic(x,y)=uint8(median(t));endendelseif strcmp(type,'ZDZ')%最大值for x=1:rfor y=1:ct=[iob(x,y:(y+2*d)) iob(x+1,y:(y+2*d)) iob(x+2,y:(y+2*d))];pic(x,y)=uint8(max(t));endendelseif strcmp(type,'ZXZ')%最小hifor x=1:rfor y=1:ct=[iob(x,y:(y+2*d)) iob(x+1,y:(y+2*d)) iob(x+2,y:(y+2*d))];pic(x,y)=uint8(min(t));endendelseif strcmp(type,'ZD')%中点值for x=1:rfor y=1:ct=[iob(x,y:(y+2*d)) iob(x+1,y:(y+2*d)) iob(x+2,y:(y+2*d))];pic(x,y)=uint8((max(t)+min(t))/2);endendelseif strcmp(type,'ZDZX')%最大最小值,外部迭代for x=1:rfor y=1:ct=[iob(x,y:(y+2*d)) iob(x+1,y:(y+2*d)) iob(x+2,y:(y+2*d))];if ((max(t)-p(x,y))<=(p(x,y)-min(t)))pic(x,y)=uint8(max(t));elsepic(x,y)=uint8(min(t));endendendendendend
end

1.非线性滤波结果

首先以默认参数对对应的模板进行测试,测试代码。

%非线性
clear;clc
pic=imread('lena.BMP');
pic=rgb2gray(pic);
picD1=fxxkylb(pic,'1-DZZ');
picD2=fxxkylb(pic,'2-DZZ');
picRH=fxxkylb(pic,'RH');
picZDZ=fxxkylb(pic,'ZDZ');
picZXZ=fxxkylb(pic,'ZXZ');
picZD=fxxkylb(pic,'ZD');
picZDZX=fxxkylb(pic,'ZDZX');
figure(10)
set(gcf,'position',[100 100 2000 800]);
subplot(2,4,1)
imshow(pic)
xlabel("原图")
subplot(2,4,2)
imshow(picD1)
xlabel("1-D中值")
subplot(2,4,3)
imshow(picD2)
xlabel("2-D中值")
subplot(2,4,4)
imshow(picRH)
xlabel("非线性锐化")
subplot(2,4,5)
imshow(picZDZ)
xlabel("最大值")
subplot(2,4,6)
imshow(picZXZ)
xlabel("最小值")
subplot(2,4,7)
imshow(picZD)
xlabel("中点")
subplot(2,4,8)
imshow(picZDZX)
xlabel("最大最小")
saveas(gcf,'非线性效果.jpg')

由效果(见图5)可以发现1-D中值在横向呈现平均的趋势,而2-D则是整个区域的平均,而相较于线性锐化(见图6)非线性锐化对轮廓的抓取显然更加好,且线性锐化对颗粒的筛选能力更加差;而最大、最小、中点,最大图片比原来偏亮,最小比原来偏暗,中点介于两者之间,但和原图有差别,三者图片更加平滑,存在细节丢失;而最大最小,色差较小,且明显能看到图像锐化增强。

图5 非线性滤波效果

a.线性锐化和非线性锐化对比

代码

figure(11)
subplot(1,3,1)
imshow(pic)
xlabel("原图")
subplot(1,3,2)
b=[-1 -1 -1;-1 8 -1;-1 -1 -1];%一个自定义的锐化模板
imshow(xxkylb(pic,"RH",3,b))
xlabel("线性锐化")
subplot(1,3,3)
imshow(picRH)
xlabel("非线性锐化")
saveas(gcf,'锐化效果对比.jpg')

图5 线性锐化和非线性锐化的对比

而相较于线性锐化(见图6)非线性锐化对轮廓的抓取显然更加好,且线性锐化对颗粒的筛选能力更加差。

b.1-D种植参数r调整变化

代码

figure(12)
subplot(3,3,1)
imshow(pic)
xlabel("原图")
for i=1:8subplot(3,3,i+1)imshow(fxxkylb(pic,'1-DZZ',uint32(512*0.051*i)))xlabel(strcat('1-D中值,r=',num2str(i*5),"%l"))
end
saveas(gcf,'1-D中值r的讨论.jpg')

图6 r不同下1-D中值滤波的结果

1-D中值,我们看通过调整他的r的大小,效果的变化(见图6),可以看到,随着r的增大图片逐渐呈线状模糊,且其值越接近于0。

c.2-D中值滤波核大小调整变化

代码

figure(13)
subplot(3,3,1)
imshow(pic)
xlabel("原图")
for i=1:8subplot(3,3,i+1)imshow(fxxkylb(pic,'2-DZZ',(i-1)*4+3))xlabel(strcat('2-D中值,n=',num2str((i-1)*4+3)))
end
saveas(gcf,'2-D中值n的讨论.jpg')

图7 n不同下2-D中值滤波的结果

对于2-D均值滤波,通用我们取不同的n,从效果(见图7)可以看出,随着n的增大图片逐渐模糊,细节逐渐丢失,但相较于线性滤波来说,他的细节保留会好一些。

d.非线性锐化距离计算调整

代码

figure(14)
subplot(2,2,1)
imshow(pic)
xlabel("原图")
subplot(2,2,2)
imshow(picRH)
xlabel("欧氏距离非线性锐化")
subplot(2,2,3)
imshow(fxxkylb(pic,'RH',2))
xlabel("城区距离非线性锐化")
subplot(2,2,4)
imshow(fxxkylb(pic,'RH',3))
xlabel("棋盘距离非线性锐化")
saveas(gcf,'非线性锐化对范数计算方式的讨论.jpg')

图4.8 范数计算不同下非线性锐化的结果

对于非线性锐化,我们进行范数计算不同的比较,从效果(见图8)上来看使用城区距离进行非线性锐化效果较好,它对人物边缘的增益更大。

e.最大最小锐化滤波迭代次数讨论

代码

figure(15)
subplot(3,3,1)
imshow(pic)
xlabel("原图")
for i=1:8subplot(3,3,i+1)pict=fxxkylb(pic,'ZDZX');for j=1:3*(i-1)pict=fxxkylb(pict,'ZDZX');endimshow(pict)xlabel(strcat('最大最小锐化变换,n=',num2str(3*(i-1)+1)))
end
saveas(gcf,'最大最小锐化变换n的讨论.jpg')

图9 迭代次数不同的最大最小锐化变化的效果

最后对最大-最小锐化变换的迭代次数进行讨论,我们从效果(见图9)可以看出迭代次数越大,人物的轮廓越来越清晰,但是过大时,连照片中的颗粒也被锐化了出来。

三、附录

图10 lena.BMP

四、参考资料

《图像处理和分析教程》,章毓晋,第3版,人民邮电出版社

图像处理3-经典空间域增强——空域滤波相关推荐

  1. openCV实现图像的空间域增强

    一.实验目的 进一步理解图像平滑和图像锐化等空间域增强方法的原理. 了解图像平滑和图像锐化的效果和作用. 掌握图像模板运算的流程. 二.实验主要仪器设备和材料 计算机,VS2017+OpenCV 三. ...

  2. 数字图像处理系列(二)---空间域图像增强-点运算

    chapter2 空间域图像增强(点增强) 1.图像增强的基本概念 在不考虑图像降质的情况下,通过经验和试探的方法,把图像感兴趣的部分进行选择性突出,而把不在意的部分进行压制,从而得到我们想要的信息. ...

  3. 【OpenCV图像处理】十五、图像空域滤波(上)

    1.空域滤波介绍 空域滤波是一种邻域处理方法,通过直接在图像空间中对邻域内像素进行处理,达到平滑或锐化图像的作用.此外,在图像识别中,通过滤波还可以抽出图像的特征作为图像识别的特征模式. 空域滤波是图 ...

  4. 【数字图像处理】图像直方图均衡化、空域滤波(均值滤波、中值滤波)、图像锐化(Laplace算子)、图像傅里叶变换实验

    图像直方图均衡化.空域滤波.图像锐化.图像傅里叶变换 一.图像直方图均衡化 二.图像空域滤波 1.均值滤波(滤波次数n→3) 2.中值滤波(滤波次数n→3) 3.图像锐化(Laplace算子) 三.图 ...

  5. 【OpenCV图像处理】十六、图像空域滤波(下)

    空域滤波的后半部分主要讲图像的锐化相关操作. 图像锐化: 由于成像机理和成像设备的限制,尤其是对于一些专用成像设备,如医学成像,遥感成像和视频捕获等等,所成图像可能会变得模糊.图像锐化的作用就是增强图 ...

  6. 【笔记】数字图像处理--图像增强(空间域+频率域)

    前言   本篇文章仅作为博主学习笔记使用,各位小伙伴可以简单浏览大概了解一下图像增强方面的知识呀

  7. 图像处理-空间域锐化滤波

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-14.html 目录: 1.前言  2.锐化滤波  3.Robe ...

  8. 图像处理-空间域平滑滤波

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-12.html 目录: 1.       空间域和频域的概念 2 ...

  9. 数字图像的空间域滤波和频域滤波

    数字图像的空间域滤波和频域滤波 一.实验目的 1.        掌握图像滤波的基本定义及目的. 2.        理解空间域滤波的基本原理及方法. 3.        掌握进行图像的空域滤波的方法 ...

最新文章

  1. 中国大学MOOC 人工智能导论第七章测试
  2. 对象作为函数参数可能会导致的问题
  3. Linux网络编程——tcp并发服务器(多线程)
  4. LeetCode 138. 复制带随机指针的链表(哈希 / 深拷贝)
  5. linux 修改网卡报错xe,centos修改端口出现Failed to start OpenSSH server daemon 启动报错和-xe报错的解决方法...
  6. Spring Data JPA: 实现自定义Repository
  7. Arcgis10.8中将三维的高程点转换为二维的高程点
  8. 使用 Trapezoidal Rule(梯形法则)求积分
  9. IIS搭建本地服务器,花生壳实现外网通过域名访问网站
  10. Apache反向代理配置
  11. 视频教程-Python编程的术与道:Python语言入门-Python
  12. JZOJ5939. 【NOIP2018模拟10.30】阻击计划
  13. hdu 1873 看病要排队
  14. 计算机视觉论文doc,计算机视觉论文.doc
  15. flex布局控制每行显示几个且有间隔
  16. 【C语言刷题】将一个十进制数字转化为二进制数字
  17. push()与pop()的使用
  18. 工业器械视觉检测方案
  19. 人脸识别4-百度商用方案调研
  20. 微信小程序●云开发部署攻略

热门文章

  1. MCU是什么——结构与组成
  2. cannot import name ‘Markup‘ from ‘jinja2‘
  3. 计算机特殊社会环境,《职业生涯规划书》PPT课件
  4. 西部数据硬盘支持linux,技术|对西部数据 My Passport Wireless 移动存储进行 Linux 魔改...
  5. 英语基础语法(十一)-倒装句
  6. 定点DSP与浮点DSP的比较(定点DSP和浮点DSP的定义)
  7. 视频怎么转音频?详细的转换步骤
  8. 信用卡欺诈检测python
  9. 局域网服务器常用的操作系统,局域网操作系统
  10. 无线网络代理服务器广东,广东运营商推免费WiFi上网服务