实验要求

  编写一个能够完成两幅图像之间加、减、乘、除四种算术运算的函数。另外,对于两幅图像的乘法,所编写的乘法程序还要能够完成一幅图像乘以一个常数的功能。使用图Fig1.10(4)和Fig1.10(5)验证实验。

  编写一个对图像进行空域滤波的函数(实现方法见课本3.5 节)。空域模板的尺寸固定为3 x 3 大小, 但模板中的系数要做为程序的输入参数。

  (1.a) 使用上述函数实现图像的平滑滤波,其中的模板使用图3.32 所示的掩模。

  (1.b) 使用上述函数实现公式(3.6-8)和公式(3.6-9)描述的拉普拉斯图像锐化增强技术,其中的拉普拉斯模板使用图3.37(c)(d)所示的掩模。

  (1.c) 使用上述函数实现公式(3.6-8)和公式(3.6-9)描述的一阶导数锐化增强技术,其中的一阶导数模板使用图3.41(d)(e)所示的掩模。

  (1.d) 使用课本图3.38(a),对(1.a)(1.b)(1.c)中的程序实现进行验证,并对结果进行简要对比分析。

  (2.a) 编写一个给图像中添加椒盐噪声的程序,程序的输入参数为两个噪声分量的概率值。

  (2.b) 编写的程序,实现3 x 3 中值滤波。

  (2.c) 给图5.7(a)添加Pa = Pb = 0.2 的椒盐噪声。

  (2.d) 对 (2.c)中得到的图像进行中值滤波。说明实验结果与课本图5.10(b)的主要差异。


技术论述

1.图像间算术运算

  图像相加一般用于对同一场景的多幅图像求平均效果,以便有效地降低具有叠加性质的随机噪声。

  图像减法也称为差分方法,是一种常用于检测图像变化及运动物体的图像处理方法。

  图像乘法运算可以实现掩模操作。图像乘以一个常数通常被称为缩放,是一种常见的图像处理操作。当缩放因数大于1时图像亮度将增强,当缩放因数小于1则会使图像变暗。

  图像除法运算可用于校正成像设备的非线性影响,这在特殊形态的图像处理中常常用到,也常用语检测两幅图像间的区别。

2.图像空间滤波

  本实验所用空间滤波方法有平滑滤波、拉普拉斯滤波、sobel滤波。
平滑滤波器用于模糊处理和降低噪声。模糊处理经常用于预处理任务中,例如在(大)目标提取之前去除图像中的一些琐碎细节,以及其桥接直线或曲线的缝隙。通过线性滤波和非线性滤波模糊处理,可以降低噪声。

  一幅M×N的图像经过一个大小为m×n(m和n是奇数)的加权均值滤波器滤波的过程可由下式给出:

  拉普拉斯滤波是通过二阶微分来对图像进行锐化。一个图像函数f(x,y)的拉普拉斯算子定义为



  一阶导数锐化增强是用梯度幅值来实现的,其中sobel算子是图3.41中的(d)、(e)。对于函数f(x,y),f在坐标(x,y)处的梯度定义为二维列向量,它指出了在位置(x,y)处f的最大变化率的方向。

3.非锐化掩蔽

  非锐化掩蔽的处理过程由下列步骤组成:
  (1) 模糊原图像。
  (2) 从原图像中减去模糊图像(产生的差值图像称为模板)。
  (3) 将模板加到原图像上。

4.椒盐噪声

  对于一幅8比特图像,a =0(黑)和b =255(白)。黑点是胡椒点,白点是盐粒点。

5.中值滤波

   中值滤波器是常用的统计排序滤波器,是一种非线性平滑技术,使用一个像素邻域中的灰度级的中值来替代该像素的值。对于某些类型的随机噪声如单极或双极脉冲噪声,中值滤波器可以提供良好的去噪能力,而且比相同尺寸的线性平滑滤波器引起的模糊更少。

  要实现中值滤波,首先将像素邻域中所有像素点的灰度值进行排序,然后用排序后的中值替代该像素的值即可。中值滤波对脉冲噪声有良好的滤除作用,特别是在滤除噪声的同时,能够保护信号的边缘,使之不被模糊。


实验结果





实验程序

% 主函数img_A = imread('Fig1.10(4).jpg');
img_B = imread('Fig1.10(5).jpg');img1 = compute(img_A,'+',img_B);                     % 加法
img2 = compute(img_A,'-',img_B);                     % 减法
img3 = compute(img_A,'*',img_B);                     % 乘法
img4 = compute(img_A,'/',img_B);                     % 除法
img5 = compute(img_A,'*',0.5,1);                     % 图像乘以0.5
img6 = compute(img_A,'*',2,1);                       % 图像乘以2subplot(1,2,1);imshow(img_A);title('原图像Fig1.10(4)');
subplot(1,2,2);imshow(img_B);title('原图像Fig1.10(5)');figure;
subplot(3,2,1);imshow(img1);title('图像相加');
subplot(3,2,2);imshow(img2);title('图像相减');
subplot(3,2,3);imshow(img3);title('图像相乘');
subplot(3,2,4);imshow(img4);title('图像相除');
subplot(3,2,5);imshow(img5);title('图像Fig1.10(4)乘以0.5');
subplot(3,2,6);imshow(img6);title('图像Fig1.10(4)乘以2');
function img_out = compute(A,param,B,is_num)% 该函数用于完成两幅图像之间的加、减、乘、除四种算术运算,
% 其中乘法还能实现一幅图像与一个常数相乘。
%  A为输入的第一幅图像,B为输入的第二幅图像或者常数,由is_num确定,
%  param指+、-、*、/四个运算符。[M,N]= size(A);
img_out = zeros(M,N);if nargin == 3 for m = 1:Mfor n = 1:N   if param == '+'                          % 加法img_out(m,n) = A(m,n)+B(m,n);elseif param == '-'                      % 减法img_out(m,n) = abs(A(m,n)-B(m,n));elseif param == '*'                      % 乘法img_out(m,n) = A(m,n)*B(m,n);                elseif param == '/'                      % 除法(考虑除数是否为零)if(B(m,n) ~= 0)                         img_out(m,n) = A(m,n)/B(m,n);elseimg_out(m,n) = 255;endendendend
elseif nargin ==4 && param == '*' && is_num == 1     % 图像乘以一个常数for m = 1:Mfor n = 1:Nimg_out(m,n) = A(m,n)*B; endend
elsedisp("Input Error");
endimg_out = uint8(img_out);
end
% 主函数img = imread('Fig3.38(a).jpg');M_smooth1 = [1 1 1;1 1 1;1 1 1]/9;                    % 掩模
M_smooth2 = [1 2 1;2 4 2;1 2 1]/16;
M_lap1 = [0 -1 0;-1 -4 -1;0 -1 0];
M_lap2 = [-1 -1 -1;-1 8 -1;-1 -1 -1];
M_sobel1 = [-1 -2 -1;0 0 0;1 2 1];
M_sobel2 = [-1 0 1;-2 0 2;-1 0 1];img_smooth1 = filter_spatial(img,M_smooth1);          % 平滑滤波
img_smooth2 = filter_spatial(img,M_smooth2);f_lap1 = filter_spatial(img,M_lap1);                  % 拉普拉斯图像锐化增强
mask_lap1 = compute(img,'-',f_lap1);
img_lap1 = compute(img,'+', mask_lap1);f_lap2 = filter_spatial(img,M_lap2);
mask_lap2 = compute(img,'-',f_lap2);
img_lap2 = compute(img,'+', mask_lap2);f_sobel1 = filter_spatial(img,M_sobel1);              % 一阶导数锐化增强
mask_sobel1 = compute(img,'-',f_sobel1);
img_sobel1 = compute(img,'+', mask_sobel1);f_sobel2 = filter_spatial(img,M_sobel2);
mask_sobel2 = compute(img,'-',f_sobel2);
img_sobel2 = compute(img,'+', mask_sobel2);subplot(2,2,1);imshow(img);title('原图像Fig3.38(a)');
subplot(2,2,3);imshow(img_smooth1);title('平滑滤波:模板a');
subplot(2,2,4);imshow(img_smooth2);title('平滑滤波:模板b');
figure;
subplot(2,2,1);imshow(img_lap1);title('拉普拉斯锐化:模板c');
subplot(2,2,2);imshow(img_lap2);title('拉普拉斯锐化:模板d');
subplot(2,2,3);imshow(img_sobel1);title('sobel锐化:模板d');
subplot(2,2,4);imshow(img_sobel2);title('sobel锐化:模板e');
function img_out = filter_spatial(img_in,M)% 该函数用于对图像进行空间滤波,空域模板M的尺寸固定为3 x 3 大小。[X,Y] = size(img_in);
img_out = zeros(X,Y);for x = 2:X-1for y = 2:Y-1img_out(x,y) = img_in(x-1,y-1)*M(1,1)+img_in(x-1,y)*M(1,2)+img_in(x-1,y+1)*M(1,3)...+img_in(x,y-1)*M(2,1)+img_in(x,y)*M(2,2)+img_in(x,y+1)*M(2,3)...+img_in(x+1,y-1)*M(3,1)+img_in(x+1,y)*M(3,2)+img_in(x+1,y+1)*M(3,3);end
endimg_out = uint8(img_out);end    
% 主函数img = imread('Fig5.07(a).jpg');
img_sp = salt_pepper(img,0.2,0.2);          % 椒盐噪声
img_med = filter_median(img_sp);            % 中值滤波subplot(3,1,1);imshow(img);title('原图像Fig5.07(a)');
subplot(3,1,2);imshow(img_sp);title('添加椒盐噪声');
subplot(3,1,3);imshow(img_med);title('中值滤波');
function img_out = salt_pepper(img_in,Pa,Pb)% 该函数用于给图像添加椒盐噪声。if Pa>=1 || Pb>=1                   % 检测输入参数error('Input Error');
end[M,N] = size(img_in);
img_out = img_in;
s = rand(M,N);                      % 产生M行N列的位于(0,1)区间的随机数
p = rand(M,N);for m = 1:Mfor n = 1:Nif s(m,n)<=Paimg_out(m,n)=0;         % 盐粒噪声endif p(m,n)<=Pbimg_out(m,n)=255;       % 胡椒噪声endend
end
end
function img_out = filter_median(img_in)% 该函数用于实现中值滤波[R,C] = size(img_in);
img_in = double(img_in);
img_out = zeros(R,C);for m = 2:R-1                   % 冒泡排序for n = 2:C-1M = [img_in(m-1,n-1),img_in(m-1,n),img_in(m-1,n+1);...img_in(m,n-1),img_in(m,n),img_in(m,n+1);...img_in(m+1,n-1),img_in(m+1,n),img_in(m+1,n+1)];img_out(m,n) = median(M);end
endimg_out = uint8(img_out);
end        
function m = median(M)% 该函数用于计算3×3矩阵的中值。for i = 1:8for j = 1:8if M(j)>M(j+1)t = M(j);M(j) = M(j+1);M(j+1) = t;endend
endm = M(5);
end

【图像处理】空间滤波、中值滤波(Spatial Filtering and Median Filtering)相关推荐

  1. JAVA空间滤波——中值滤波

    在讲述如何通过JAVA编程实现中值滤波之前,先谈一下与空间滤波相关的数字图像处理的概念. 1.关于图像和数字图像处理 可以将图像视为是一个二维函数F(x,y),其中(x,y)代表一张数字图像上面对应像 ...

  2. FPGA图像处理_中值滤波、均值滤波、极值滤波

    FPGA实现图像滤波(中值滤波.均值滤波.极值滤波) 前言 一.滤波原理 二.FPGA上Verilog实现步骤 1.图像周围填0 2.数据延迟 3.数据处理 总结 前言 首先介绍滤波原理,再附上ver ...

  3. 图像处理:中值滤波均值滤波

    转自:openCV之中值滤波&均值滤波(及代码实现):https://blog.csdn.net/weixin_37720172/article/details/72627543  在开始我们 ...

  4. 图像处理-自适应中值滤波

    原文链接:https://blog.csdn.net/qq_35608277/article/details/78498044 提出原因: 常规的中值滤波器,在噪声的密度不是很大的情况下(根据经验,噪 ...

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

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

  6. 数字图像处理——中值滤波中心加权中值滤波

    引言:在处理图像时,线性滤波将破坏边缘,而且不能有效滤除脉冲噪声.非线性滤波基于对输入信号序列的一种非线性映射关系,常可把某一特定的噪声近似映射为零而保留信号的重要特征,因而可以在一定程度上克服线性滤 ...

  7. 图像平滑处理(归一化块滤波、高斯滤波、中值滤波、双边滤波)

    图像平滑处理 目标 本教程教您怎样使用各种线性滤波器对图像进行平滑处理,相关OpenCV函数如下: blur GaussianBlur medianBlur bilateralFilter 原理 No ...

  8. Python实现图像的椒盐噪声添加和基础的平滑处理(均值滤波与中值滤波)

    均值滤波与中值滤波是最常见的两种平滑的方式,尤其是中值滤波能起到强大的降噪效果. 本文内容分为三部分: 1.实现添加图片的椒盐噪声 2.实现调用内置函数进行均值和中值滤波 3.自编函数深刻理解均值和中 ...

  9. 数字图像处理实验(三)|图像增强{归一化直方图imhist(f)/numel(f)、直方图均衡化histeq、生成线性空间滤波fspecial、中值滤波medfilt2}(附matlab实验代码截图)

    文章目录 一.实验目的 二.实验原理 1. 基本亮度变换函数 2.直方图均衡化 3.空间域滤波 三.预备知识: 四.实验内容 1.灰度修正 2.直方图均衡化: 3.空间域滤波 4. 频域率滤波 五.思 ...

最新文章

  1. python中sorted函数逆序_Python中sorted函数的用法(转)
  2. 根据title 关闭cmd 窗口_2种Win7关闭休眠功能方法
  3. MySQL通过存储过程使用循环结构循环创建数据,以及批量数据的导入导出
  4. http响应协议分析
  5. 利用脚本批量添加域用户账户
  6. 业务异常 java_谈谈RxJava处理业务异常的几种方式
  7. Anaconda——conda换源可以直接通过conda命令来实现
  8. 计算机图形学大几学的,计算机图形学大作业-WenhaoYu.PDF
  9. 小学steam计算机课程案例,STEAM教育与小学信息技术课程的融合
  10. 杀毒软件误删文件了怎么办?如何恢复被杀毒软件删除的文件
  11. 【转载】Linux查看日志
  12. VSCode HTML文件 英文感叹号 ! + Tab 没有出现模板 解决方法
  13. python——字符串练习:句子反转(小米笔试题)
  14. ClickHouse SAMPLE 采样子句介绍
  15. mysql几条相同的数据删除只留一条id最大的数据
  16. c语言运行可以微信直接打开吗,如何用软件visual+c+++直接打开已将创建好的MFC工程文? 爱问知识人...
  17. 机器学习——周志华读书笔记
  18. 深度学习与NLP 深度学习|机器学习|人工智能 精品视频教程合集分享
  19. border属性之border-radius
  20. c语言编程题企业奖金,【C语言】企业奖金发放问题

热门文章

  1. vs不想运行某个项目_Creo二次开发--项目搭建
  2. 数据挖掘原理与算法 K-Means算法
  3. pytorch学习笔记(十七):Read-Write
  4. 均分纸牌模型之mxj分礼物
  5. ~~约数之和(附模板题)
  6. 关于“单元组”数量的计算
  7. ubuntu 安装 最新 OpenBabel
  8. Java获取函数参数名称
  9. 东大OJ-一元三次方程解的个数
  10. Python的基础知识【面试遇到】