数字图像处理期末复习2018-12-21
愉快先生
0.204
·
字数 5547 · 阅读 1834
2018-12-22 19:35
(数字图像冈萨雷斯第二版教材)
一、基本原理
- 图像的读取、存储操作:
i= imread('filename') ; imwrite(i,’image.jpg’);
- 图像显示的⽅法及区别:
imshow(i); imshow(i,[]);%0~255映射 imshow(i,[min max])%指定映射区间min到max
解释:见博客:https://blog.csdn.net/Michael__Corleone/article/details/68483407
问题:在使用imshow(A)显示一张灰度图片时,显示出的是一张纯白的图片。(A为double类型的图像矩阵)
原因:在matlab中,为了保证精度,经过了运算的图像矩阵A其数据类型会从unit8型变成double型。
imshow()显示图像时对double型是认为在0~1范围内,即大于1时都是显示为白色。
imshow显示uint8型时是0~255范围。
使用imshow(A,[]),即可把图像矩阵A显示为正常的灰度图像。
原理:imshow(A,[])是将A的最大值(max(A))和最小值(min(A))分别作为纯白(255)和纯黑(0),
中间的K值相应地映射为0到255之间的标准灰度值,这样就可以正常显示了。
相当于将double型的矩阵A拉伸成为了0-255的uint8型的矩阵,因此就可以正常显示。
- 图像的索引操作
见数字图像处理第二版P14 索引=下标
二、图像灰度变换和空间滤波
- 图像常见灰度变换及适用场合
- gamma变换
教材P24
g=imadjust(f,[low high],[new_low new_high],gamma)
1.将f中灰度值映射为图g中新值。
2.low high (输入的值)在0到1之间
3.gamma>1突出亮区; gamma<1突出暗区
- log(突出暗部细节)
G = intrans(F, 'log', C, CLASS)
g=c*log(1+f)
- stretch变换(灰度拉伸变换)
G = intrans(F, 'stretch', M, E)
g=1./(1+(m./f).^E) %m是阈值在0到1之间 E是斜率
使图像亮的地方更亮,暗的地方更暗,从而增加图像的可视细节
- 图像直方图处理
- 直方图含义及特点
- imhist(f)
- 含义: 反映图片包含各个灰度所占百分比 (王美丽啥都会经常叨咕的)
- 特点:与空间位置无关,对几何攻击不敏感
- 直方图均衡化的思想、步骤、实现
- 处理骨骼挺好的。
- 思想:把输入图像否认灰度级扩展到较宽灰度级范围来实现图像增强。
- 步骤:新的灰度是原始灰度的累加,累计概率密度映射
- 实现代码:g=histeq(f,256)
- 直方图匹配(规定化)的思想、步骤、实现
- g=histeq(f,p)
- 答:生成具有特定直方图的图像方法,称为直方图匹配或直方图规定化
- 1.直方图规定化(直方图匹配)是将变换过程加以控制,
- 能够修正直方图的形状,或得到具有指定直方图的输出图像。
- 有选择地增强某个灰度范围内的对比度或使图像灰度值满足某种特定的分布。
- 2.直方图规定化是在运用均衡化原理的基础上,
- 通过建立原始图像和期望图像(待匹配直方图的图像)之间的关系,
- 使原始图像的直方图匹配特定的形状,
- 弥补直方图均衡化不具备交互作用的特性。
- 空间滤波
- 空间滤波的处理思想:利用模板对图像进行卷积
- 均匀滤波:
- h = fspecial(type,parameter);
- g = imfilter(f,w,’replicate’);
平均滤波器: h = fspecial('average',hsize)
高斯滤波器: h = fspecial('gaussian',hsize,sigma)
圆盘滤波器: h = fspecial('disk',radius)
运动滤波器: h = fspecial('motion',len,theta)
- 锐化滤波
教材P50
sobel算子 : h = fspecial('sobel')
prewitte算子 : h = fspecial('prewitte')
log算子 : h = fspecial('log',hsize,sigma)
lapalase算子 : h = fspecial('laplacian',alpha)
- 统计排序滤波器(非线性空间滤波器)
g=ordfilt2(f,order,domain)
最小滤波器:g=ordfilt2(f,1,ones(m,n));
最大滤波器:g=ordfilt2(f,m*n,ones(m,n));
最知名的中值滤波器:g=ordfilt2(f,(m*n+1)/2,ones(m,n));
中值滤波器专用实现:g=medfilt2(f,[m n],padopt);
%数组[m n]定义一个大小为m*n的邻域(在该邻域上计算中值)
%padopt指定三个可能的边界填充选项之一:
%‘zeros’(默认值),‘symmetric’指出f按照镜像反射方式沿边界扩展
%‘indexed‘表示若f是double类的则用1填充,否则用0填充。
默认形式:g=medfilt2(f);使用一个大小为3*3的邻域并用0填充边界计算中值。
中值滤波器对椒盐噪声处理很好。
三、图像傅里叶变换和频率与处理
如果看了此文你还不懂傅里叶变换,那就过来掐死我吧【完整版】
- 傅里叶变换的性质:
- 答:频谱共轭对称性,线性,周期性,旋转不变性,时域卷积对应频域乘积
- 傅立叶图像反映的信息有什么物理含义:
- 答:四个角亮代表图像高频信息,中间大部分代表低频信息。
- 怎么对图像实现傅立叶变换,怎么对频谱中心进行平移?
- 答:F=fft2(f); F=fftshift(F)
- 频域内图像处理的流程是什么?
- 答:
- 1.使用paddedsize获得填充参数:PQ = paddedsize(size(f));%如果输入是彩色图像,必须要灰度化rgb2gray。
- 2.得到使用填充的傅里叶变化:F = fft2(f, PQ(1), PQ(2));
- 3.生成一个大小为PQ(1) X PQ(2) 的滤波函数H。如果该滤波函数已居中,使用前要令H = fftshift(H)。
- 4.将变换乘以滤波函数:G = H.*F;
- 5.获得G的傅里叶逆变换的实部:g = real(ifft2(G));
- 6.将左上部分的矩形剪切为原来尺寸大小:
- g = g(1:size(f,1), 1:size(f, 2));
f=imread('C:甥敳獲liulangDesktopest.jpg');g=rgb2gray(f);% 利用imread读出一副图像,显示图像 f = imread (‘….’);
f = im2double(g); % 将图片类型转成double类型;
h=fspecial('average');% 利用fspecial生成一个空间滤波器,滤波器类型自定义 h= fspecial(…);
PQ=paddedsize(size(f))% 利用paddedsize设计频率滤波器的大小 PQ=paddedsize(size(f));
H=freqz2(h,PQ(2),PQ(1))% 利用freqz2生成相应的频域滤波器H = freq2(h, PQ(2),PQ(1));
F=fftshift(fft2(f,PQ(1),PQ(2)))% 利用函数fft2计算图像的傅里叶变换 F = fft2 (f, PQ(1),PQ(2)));要中心平移,产生的滤波器原点在矩阵中心处
f=imfilter(f,h);% 利用imfilter和h进行空间滤波;
J=F.*H;J=ifft2(J);J=abs(J);% 将F和H相乘,在做ifft2变换,再取实部,再进行剪切,得到频域滤波结果
J=J(1:size(f,