690 likes | 904 Views
数字图像处理. 第五章续. 第五章续. 图像与直方图 的关系 加法运算减少加性噪音 降噪 边缘检测 加法运算的直方图. 直方图与图像的关系. 三步曲. 图像表达式. 面积公式. 直方图. 直方图与图像的关系. 简单图像的函数形式已知,即可推导出其直方图。加深对直方图的理解,特别是阈值选择问题的基础。 方法:通过面积函数求导,得直方图 。 1)一维情况, 高斯脉冲函数. 所谓图像函数形式指的是图像亮度的分布情况由一个函数给出. 连续高斯函数. 离散数字图像 举例. 直方图与图像的关系.
E N D
数字图像处理 第五章续
第五章续 • 图像与直方图的关系 • 加法运算减少加性噪音 • 降噪 • 边缘检测 • 加法运算的直方图
直方图与图像的关系 三步曲 图像表达式 面积公式 直方图
直方图与图像的关系 • 简单图像的函数形式已知,即可推导出其直方图。加深对直方图的理解,特别是阈值选择问题的基础。 • 方法:通过面积函数求导,得直方图。 • 1)一维情况,高斯脉冲函数 所谓图像函数形式指的是图像亮度的分布情况由一个函数给出 连续高斯函数 离散数字图像举例
直方图与图像的关系 • 给定一个灰度级D,阈值面积函数A(D)即为x的取值范围 • 求导得直方图 反函数
直方图与图像的关系 • 求得的直方图
直方图与图像的关系 • 2)二维情况,圆对称高斯脉冲函数 r
直方图与图像的关系 • 2)二维情况,圆对称高斯脉冲函数 离散数字图像举例 x
直方图与图像的关系 • 给定一个灰度级D,阈值面积函数A(D)即为x,y的取值范围 • 求导得直方图 反函数
直方图与图像的关系 • 求得的直方图
加法运算应用 • 1)噪声分类 • 加性噪声:加性噪声和图像信号强度不相关。 • 乘性噪声:乘性噪声和图像信号是相关的。 • 椒盐(Salt and Pepper)噪声:黑图像上的白点,白图像上的黑点。 • 量化噪声:是由量化过程引起的,解决的最好方法是最佳量化。
加法运算应用 • 例子 上海朱家角风光 有加性噪声的朱家角风光
加法运算应用 • 例子 有乘性噪声的朱家角风光 有椒盐噪声的朱家角风光
加法运算应用 • 加法运算可以用来降低图像中的随机加性噪音
加法运算应用 • Lenna的8个随机加性噪音图片 噪声图像1 噪声图像2 噪声图像3 噪声图像4 噪声图像5 噪声图像6 噪声图像7 噪声图像8
加法运算应用 • 降噪后的图像 原始图像 降噪后图像
加法运算应用 • 定理:对M幅加性噪声图像进行平均,可以使图像的平方信噪比提高M倍。 • 证明: 信号 信噪比 噪声 注意两点: 1 平方信噪比的概念 2 假定独立分布噪声期望为0
加法运算应用 当加性噪音均值为0时
加法运算应用 当加性噪音均值不为0时 高斯加性噪音 一阶均值 二阶均值 以2幅图像为例
加法运算应用 当加性噪音均值不为0时
实验一下 function denoising() • % 载入图像 • I = imread([‘lenna.png']); • I = I(:,:,1); % transform into gray image • % generate multiple noise images • [NL,NS] = size(I); • number_images = 500; • mu = 0; % 高斯噪声的均值 • delta = 1; % 高斯噪声的方差
实验一下 • New_I= zeros(NL,NS); • for i = 1:number_images • J=imnoise(I,'gaussian',mu,delta);%加入均值为mu,方差为delta的高斯噪声 • New_I = New_I + double(J); • end • New_I = New_I/number_images; • New_I = uint8(New_I); 为什么?
实验一下 • subplot(2,3,1);imshow(I); • title('原始图像'); • subplot(2,3,2);imshow(J); • title(['加高斯噪声图像,均值为' num2str(mu) ', 方差为' num2str(delta)]); • subplot(2,3,3);imshow(New_I); • title([num2str(number_images) '幅加噪图像平均后的图像']);
实验一下 • [NL,NS] = size(I); • number_images = 500; • mu = 0.1; % 高斯噪声的均值 • delta = 1; % 高斯噪声的方差 • New_I = zeros(NL,NS); • for i = 1:number_images • J=imnoise(I,'gaussian',mu,delta);%加入均值为mu,方差为delta的高斯噪声 • New_I = New_I + double(J); • end • New_I = New_I/number_images; • New_I = uint8(New_I);
实验一下 • subplot(2,3,4);imshow(I); • title('原始图像'); • subplot(2,3,5);imshow(J); • title(['加高斯噪声图像,均值为' num2str(mu) ', 方差为' num2str(delta)]); • subplot(2,3,6);imshow(New_I); • title([num2str(number_images) '幅加噪图像平均后的图像']);
降噪 • 比较经典的图像去噪算法 • 均值滤波算法:也称线性滤波,主要思想为邻域平均法,即用几个像素灰度的平均值来代替每个像素的灰度。 • 有效抑制加性噪声,但容易引起图像模糊,可以对其进行改进,主要避开对景物边缘的平滑处理。
降噪 • 比较经典的图像去噪算法 • 高斯滤波算法:也是基于邻域平均的思想。与均值滤波不同的是,每个领域像素值的权值是不一样的,由高斯分布决定。越靠近中间的越大,越靠近两边的呈指数级衰减。
降噪 • 比较经典的图像去噪算法 • 中值滤波:基于排序统计理论的一种能有效抑制噪声的非线性平滑滤波信号处理技术。 • 中值滤波的特点即是首先确定一个以某个像素为中心点的邻域,一般为方形邻域,也可以为圆形、十字形等等,然后将邻域中各像素的灰度值排序,取其中间值作为中心像素灰度的新值,这里领域被称为窗口,当窗口移动时,利用中值滤波可以对图像进行平滑处理。其算法简单,时间复杂度低,但其对点、线和尖顶多的图像不宜采用中值滤波。很容易自适应化。
降噪 • 比较经典的图像去噪算法 • Wiener维纳滤波:使原始图像和其恢复图像之间的均方误差最小的复原方法,是一种自适应滤波器,根据局部方差来调整滤波器效果。 • 对于去除高斯噪声效果明显。 • 基本思想:对于信号部分,它的灰度级是可以被它的邻点灰度级重构的。而对于噪声部分,它的灰度级是不能被它的邻点灰度级重构的。 简而言之:基本思想是重构
均值滤波算法例子 function mymeanfilter() • I=imread('lenna.png');%读取图像 • I=I(:,:,1); • J=imnoise(I,'gaussian',0,0.005);%加入均值为0,方差为0.005的高斯噪声 • subplot(2,3,1);imshow(I);
均值滤波算法例子 • title('原始图像'); • subplot(2,3,2); imshow(J); • title('加入高斯噪声之后的图像'); • %采用MATLAB中的函数filter2对受噪声干扰的图像进行均值滤波
均值滤波算法例子 • K1=filter2(fspecial('average',3),J)/255; %模板尺寸为3 • K2=filter2(fspecial('average',5),J)/255;% 模板尺寸为5 • K3=filter2(fspecial('average',7),J)/255; %模板尺寸为7 • K4= filter2(fspecial('average',9),J)/255; %模板尺寸为9 Gaussian滤波相应地把’average’改成’gaussian’,参数改为方差值
均值滤波算法例子 • subplot(2,3,3);imshow(K1); • title('改进后的图像1'); • subplot(2,3,4); imshow(K2); • title('改进后的图像2'); • subplot(2,3,5);imshow(K3); • title('改进后的图像3'); • subplot(2,3,6);imshow(K4); • title('改进后的图像4');
降噪 • 均值滤波算法例子
Wiener维纳滤波算法例子 • function mywienerfilter() • I=imread('lenna.png');%读取图像 • I=I(:,:,1); • J=imnoise(I,'gaussian',0,0.005); %加入均值为0,方差为0.005的高斯噪声
Wiener维纳滤波算法例子 • K1=wiener2(J,[3 3]); %对加噪图像进行二维自适应维纳滤波 • K2=wiener2(J,[5 5]); %对加噪图像进行二维自适应维纳滤波 • K3=wiener2(J,[7 7]); %对加噪图像进行二维自适应维纳滤波 • K4=wiener2(J,[9 9]); %对加噪图像进行二维自适应维纳滤波
Wiener维纳滤波算法例子 • subplot(2,3,1);imshow(I); • title('原始图像'); • subplot(2,3,2);imshow(J); • title('加噪图像'); • subplot(2,3,3);imshow(K1); • title('恢复图像1'); • subplot(2,3,4);imshow(K2); • title('恢复图像2'); • subplot(2,3,5);imshow(K3); • title('恢复图像3'); • subplot(2,3,6);imshow(K4); • title('恢复图像4');
降噪 • Wiener维纳滤波
中值滤波算法例子 • function mymedfilter() • I=imread('lenna.png');%读取图像 • I=I(:,:,1); • J=imnoise(I,'salt & pepper',0.02); • K1=filter2(fspecial('average',3),J)/255; %均值滤波模板尺寸为3 • K2= medfilt2(J);%采用二维中值滤波函数medfilt2对受椒盐噪声干扰的图像滤波 • K3=wiener2(J,[3 3]); %对加噪图像进行二维自适应维纳滤波
中值滤波算法例子 • subplot(2,3,1);imshow(I); • title('原始图像'); • subplot(2,3,2);imshow(J); • title('加噪图像'); • subplot(2,3,3);imshow(K1); • title('均值滤波后的图像'); • subplot(2,3,4);imshow(K2); • title('中值滤波后的图像'); • subplot(2,3,5);imshow(K3); • title('维纳滤波后的图像');
降噪 • 椒盐噪声下均值滤波,Wiener维纳滤波和中指滤波的效果图
边缘检测 • 边缘检测是图像处理和计算机视觉中的基本问题 • 目的:标识数字图像中亮度变化明显的点。它存在于目标与背景、目标与目标、区域与区域之间。 • 图像分割、图像压缩、特征提取等方面都把边缘检测作为基本的工具
边缘检测 • 边缘检测的功能 • 检测图像中物体的边缘 • 识别图像的形状 • 提取图像的特征 • 确定图像中物体的位置 • 辅助物体识别和理解 • … 基本思想: 相邻像素灰度分布的梯度大,则视为物体的边缘; 怎么计算梯度呢?
边缘检测 • 边缘检测并不容易 • 图1 • 图2 边缘明显? 边缘还那么明显?
边缘检测 • 边缘检测的经典算法 • Roberts算子是一种利用局部差分算子寻找边缘的算子,对于边界陡峭且噪声比较小的图像检测效果比较好。它在2×2邻域上计算对角导数 • 简化计算,用梯度的绝对值近似 • If, 则为边缘;否则不为边缘 • 对噪声比较敏感,经常会出现孤立点?
Roberts算子的简便记忆 实际上是滤波的基本思想
边缘检测 • 边缘检测的经典算法 • Prewitt算子将2×2邻域扩大到3×3来计算梯度 • If, 则为边缘;否则不为边缘 • 能检测到边缘点,减少了对噪声的影响
边缘检测 • 边缘检测的经典算法 • Sobel算子考虑不同距离的像素点对梯度的贡献不同来计算梯度