图像的空域滤波

更新时间:2023-12-01 00:12:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《医学图像处理》实验报告

实验五:图像的空域滤波

摘要

本次实验的主要内容是:对图像分别进行均值滤波、加权平均滤波、拉普拉斯滤波、高提升滤波。

本次实验的实验目的是:了解空间滤波的原理;了解平滑空间滤波器的原理及使用;了解锐化空间滤波器(拉普拉斯算子)的原理及使用;了解高提升滤波的原理及应用。

1

一、技术讨论

1.1实验原理

空间滤波机理:就是在待处理图像中逐点地移动掩模。在每一点(x,y)处,滤波器在该点的响应通过事先定义的关系来计算。对于线性空间滤波,其响应由滤波器系数与滤波掩模扫过区域的相应像素值的乘积之和给出。

均值滤波器:使用滤波器模板确定的平均灰度值代替图像中的每个像素的灰度值,这种处理的结果降低了图像灰度的“尖锐”变化。由于典型的的随机噪声有灰度级的急剧变化组成,因此,常见的均值滤波器处理应用就是降低噪声。但是由于图像边缘也是由图像灰度尖锐变化带来的特性,所以均值滤波处理还是存在着不希望有的边缘模糊的负面效应。

加权平均滤波器:所谓加权是指用不同的系数乘以像素,使得一些像素的重要性(权重)比另一些像素的重要性更大。如果赋予中心点最高权重,然后随着距中心点距离的增加而减小系数的加权权重,其目的是在平滑处理中试图降低模糊。也可以选择其他权重来达到所需的目的。

锐化空间滤波器:使用二阶微分(拉普拉斯算子)进行图像锐化,由于拉普拉斯算子是一种微分算子,因此其应用强调的是图像的突变,并不强调灰度级缓慢变化的区域。

高提升滤波:将原图像和拉普拉斯图像叠加在一起,可以复原背景特性并保持拉普拉斯锐化处理的效果,如果使用的定义是具有负的中心系数的拉普拉斯滤波模板,那么必须将原图像减去井拉普拉斯变换后的图像而不是加上它,从而得到高提升的效果。

1.2实验方法

OpenCV函数:

实验中使用的核心函数为filter2D.

使用filter2D函数首先要建立一个Mask,如: Mat kern = (Mat_(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);

Mat_是一个模板,建立了一个3*3的矩阵,矩阵的值在-128~127. 对图像做卷积:

void Filter2D( const Mat& src, Mat& dst, int ddepth, const Mat& kernel, Pointanchor=Point(-1, -1), double delta=0, int borderType=BORDER_DEFAULT) src:输入图像 dst:输出图像

kernel:卷积核, 单通道浮点矩阵. 如果想要应用不同的核于不同的通道,先用 cvSplit 函数分解图像到单个色彩通道上,然后单独处理。

anchor:核的锚点表示一个被滤波的点在核内的位置。 锚点应该处于核内部。缺省值 (-1,-1) 表示锚点在核中心。

2

函数 cvFilter2D 对图像进行线性滤波,支持 In-place 操作。当核运算部分超出输入图像时,函数从最近邻的图像内部象素插值得到边界外面的像素值。

3

二、结果与讨论

2.1实验结果

a b

c d e

a.原图 b.盒装滤波器结果 c.均值滤波器(加权平均)结果 d.拉普拉斯处理 e.高提升滤波

2.2实验讨论

图(b)与图(a)相比,经过均值滤波后的图像比原图稍微模糊,但是图像灰度变得没有那么“尖锐”,原因是均值滤波器将滤波器模板确定的平均灰度值代替图像中的每个像素的灰度值,这种处理的结果降低了图像灰度的“尖锐”变化。

图(c)与图(a)相比效果跟图(b)差不多,原因是加权均值滤波器也是一种取平均灰度值代替原图像的像素灰度,因此同样产生了降低图像灰度的“尖锐”感的效果;事实上,图(c)与图(b)是由不同的,但是,由于两者所用模板在一幅图像中任何一个位置所跨过的区域很小,导致很难看出图(b)与图(c)之间的区别。

图(d)是图(a)经过拉普拉斯滤波后得到的图像,与原图相比,明显地滤波过后的图像大部分都变黑了,其原因是由于拉普拉斯滤波后的图像中灰度值既有正值又有负值,并且所有的负值在显示时都被修剪为0了,所以图像的大部分是黑色的。

图(e)是图(a)与图(d)相加后结果,可以看到图(e)比图(a)更清晰,能够显示更多的细节,其原因是将原图像与

拉普拉斯滤波后图像相加在一起,可以使得图像中的各灰度值得到复原,而且通过拉普拉斯增强了图像中灰度突变处的对比度,最终结果是,使得图像中的细节部分得到了增强,并良好地保留了图像的背景色调。

4

附录(实验代码)

1. 库文件

#------------------------------------------------- #

# Project created by QtCreator 2014-04-04T14:35:39 #

#------------------------------------------------- QT += core QT -= gui TARGET = 2dfourie CONFIG += console CONFIG -= app_bundle TEMPLATE = app

SOURCES += main.cpp

INCLUDEPATH+=d:\\Qt\\opencv2.2\\include\\opencv\\ d:\\Qt\\opencv2.2\\include\\opencv2\\ d:\\Qt\\opencv2.2\\include

LIBS+=d:\\Qt\\opencv2.2\\lib\\libopencv_calib3d220.dll.a\\ d:\\Qt\\opencv2.2\\lib\\libopencv_contrib220.dll.a\\ d:\\Qt\\opencv2.2\\lib\\libopencv_core220.dll.a\\

d:\\Qt\\opencv2.2\\lib\\libopencv_features2d220.dll.a\\ d:\\Qt\\opencv2.2\\lib\\libopencv_flann220.dll.a\\ d:\\Qt\\opencv2.2\\lib\\libopencv_gpu220.dll.a\\ d:\\Qt\\opencv2.2\\lib\\libopencv_highgui220.dll.a\\ d:\\Qt\\opencv2.2\\lib\\libopencv_imgproc220.dll.a\\ d:\\Qt\\opencv2.2\\lib\\libopencv_legacy220.dll.a\\ d:\\Qt\\opencv2.2\\lib\\libopencv_ml220.dll.a\\

d:\\Qt\\opencv2.2\\lib\\libopencv_objdetect220.dll.a\\ d:\\Qt\\opencv2.2\\lib\\libopencv_video220.dll.a

2. main.cpp

//

// main.cpp // SpatialFilter //

// Created by Tim Feirg on 3/22/14.

// Copyright (c) 2014 Tim Feirg. All rights reserved. //

#include

#include

#include #include using namespace cv;

5

本文来源:https://www.bwwdw.com/article/x3dt.html

Top