图像处理(二)
- 图像插值
- 最近邻插值(nearest)
- 双线性插值(bilinear)
- 双立方插值(bicubic)
- 图像大小调整
- B = imresize( A, m, method )
- B = imresize( A, [mrows ncols], method )
- B = imresize( A, m, method, n )
- B = imresize( A, m, method, h )
- 图像旋转
- B = imrotate( A, angle, method )
- B = imrotate( A, angle, method, ‘crop’ ):把图像进行angle角度旋转,返回和A大小相同的中间部分。
- 图像剪裁
- I2 = imcrop( I )
- X2 = imcrop( X, map )
- RGB2 = imcrop( RGB )
- 二维傅立叶变换
- 傅立叶变换函数
- 实现
- 滤波器频率响应
- 快速卷积
- 对A和B进行零填充,将A和B填充为2的幂次矩阵;
- 使用fft计算A和B的二维DFT(离散傅立叶变换);
- 将两个DFT计算结果相乘;
- 使用ifft2计算上一步所得的二维DFT的反变换。
- 图像特征识别
- 离散余弦变换
- 离散余弦变换的定义
- DCT变换函数
- 实现
- 应用
- 其他变换技术
- 离散沃尔什(Walsh)变换
- 离散哈达玛(Hadamard)变换
- Radon变换
- 像素值及其统计
- 选定像素的数据值(pixval函数和impixel函数)
- 沿图像中某个路径的数据值(improfile函数)
- 图像数据的轮廓图(imcontour函数)
- 图像数据的柱状图(imhist函数)
- 图像数据的摘要统计值(mean2函数、std2函数和coor2函数)
- 图像区域的特征度量(imfeature函数)
- 图像分析
- 灰度图像的边缘:edge函数
- 行四叉树分解:qtdecomp函数
- 获取四叉树分解块值:qtdgetblk函数
- 设置四叉树分解块值:qtdsetblk函数
- 图像调整
- 灰度调整(imadjust函数)
- 直方图调整(histeq函数)
- 图像平滑
- 线性滤波
- 中值滤波
- 自适应滤波
- 区域指定
- 多边形选择
- 其他选择
- 特定区域滤波
- 特定区域填充
图像的几何运算
参数method的可选值为’nearest’、’bilinear’和’bicubic’;m为放大系数;n为滤波器的尺寸;h可以看做一愕二维FIR滤波器。
图像的变换技术
|
fft2 |
二维fft变换矩阵 |
|
fftn |
n维傅立叶变换 |
|
fftshift |
将变换后图像频谱中心从矩阵的原点移到矩阵的中心 |
|
ifft2 |
计算图像的二维傅立叶反变换 |
|
ifftn |
计算图像的n维傅立叶反变换 |
|
figure(1); load imdemos saturn; figure(2); B = fftshift(fft(saturn2)); %显示变换后的系数分布 imshow(log(abs(B)),[]),colormap(jet(64)),colorbar; |
利用傅立叶变换可以得到线性滤波器的频率响应,其过程如下:首先求出滤波器的脉冲响应,然后利用快速傅立叶变换算法对滤波器的脉冲响应进行变换,得到的结果就是线性滤波器的频率响应。
|
%高斯滤波器的频率响应 h = fspecial( 'gaussian' ); freqz2(h) |
假设A是一个M×N的矩阵,B是一个P×Q的矩阵,则快速计算矩阵的方法如下:
|
A = magic(3); B = magic(3); A(8,8) = 0; B(8,8) = 0; C = ifft2(fft2(A).*fft2(B)); C = C(1:5,1:5); C = real( C ); |
对图像进行傅立叶变换后,利用快速卷积的方法计算两张图像飞卷积,提取结果的峰值。
|
dct2 |
实现图像的二维离散余弦变换 |
|
idct2 |
实现图像的二维离散余弦反变换 |
|
dctmtx |
用于计算二维离散余弦变换矩阵 |
|
RGB = imread('autumn.tif'); figure(1) imshow(RGB) %转换为灰度图 I= rgb2gray(RGB); figure(2); imshow(I); %进行余弦变换 J = dct2(I); figure(3); imshow(log(abs(J)),[]); colormap(jet(64)); colorbar; J(abs(J)<11) = 0; %进行余弦反变换 K = idct2(J)/255; figure(4); imshow(K) |
|
I = imread('cameraman.tif'); I = im2double(I); %产生二维DCT变换矩阵 T = dctmtx(8); %计算二维DCT B = blkproc(I,[8 8],'P1*x*P2',T,T'); %二值掩码,用来压缩DCT系数 mask = [1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]; %只保留DCT变换的11个系数 B2 = blkproc(B,[8 8],'P1.*x',mask); %DCT反变换,用来重构图像 I2 = blkproc(B2,[8 8],'P1*x*P2',T',T); subplot(1,2,1) imshow(I); subplot(1,2,2) imshow(I2) |
它只包括+1和-1两个数值所构成的完备正交集。与傅立叶变换相比,Walsh变换减少了存储空间和提高了运算速度。
特殊的Walsh变换,各行各列之间彼此正交。它的最大优点在于它的变换核矩阵具有简单的递推关系,即高阶矩阵可以用两个低阶矩阵求得。
是计算图像在某一角度射线方向上投影的变换方法。
图像分析
实例:灰度边缘检测实例
|
RGB=imread('peppers.png'); isrgb(RGB); figure(1); imshow(RGB); I=rgb2gray(RGB); figure(2); imshow(I),colobar('horiz'); isgray(I); ED=edge(I,'sobel',0.08); figure(3); imshow(ED); |
图像平滑的主要目的是减少图像噪音。在空间域进行时,基本方法就是求像素的平均值或中值;在频域中则运用低通滤波技术。
|
I=imread('eight.tif'); imshow(I) J=imnoise(I,'salt&pepper',0.02); figure,imshow(J) %进行中值滤波 L=medfilt2(J,[3 3]); figure,imshow(L); |
|
RGB=imread('saturn.png'); I=rgb2gray(RGB); J=imnoise(I,'gaussian',0,0.005); %采用自适应滤波 K=wiener2(J,[5 5]); figure,imshow(I); figure,imshow(J); figure,imshow(K); |
特殊区域处理
|
I = imread('eight.tif'); %指定六边形的角点 c = [222 272 300 272 222 194]; r = [21 21 75 121 121 75]; %生成对应的二值掩模图像 BW = roipoly(I, c, r); figure,imshow(I); figure,imshow(BW); |
|
I = imread('coins.png'); %选择灰度范围在128~255之间的像素 BW = roicolor(I,128,255); figure,imshow(I); figure,imshow(BW); |
|
I = imread('pout.tif'); imshow(I); %交互式选择区域 BW = roipoly %定义滤波器 h = fspecial('unsharp'); %进行区域滤波 I2 = roifilt2(h,I,BW); figure,imshow(I2); |
|
load trees I=ind2gray(X,map); imshow(I); %指定特定区域,并进行填充 I2=roifill; imshow(I2); |
浙公网安备 33010602011771号