图像变换

Posted henuliulei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像变换相关的知识,希望对你有一定的参考价值。

1旋转图像,并显示图像的傅里叶频谱

 1 I=zeros(256,256);
 2 I(28:228,108:148)=1;
 3 subplot(2,4,1);
 4 imshow(I);
 5 title(原始图像);
 6 J=fft2(I);%对信号进行快速Fourier变换,注释一
 7 F=abs(J);%求得Fourier变换后的振幅,注释二
 8 J1=fftshift(F)%注释三
 9 subplot(2,4,2);
10 imshow(J1,[5 50])
11 title(原图像的傅里叶频谱);
12 J=imrotate(I,30,bilinear,crop);%逆时针旋转30度,注释四
13 subplot(2,4,3);
14 imshow(J);
15 title(旋转30度);
16 J1=fft2(J);
17 F=abs(J1);
18 J2=fftshift(F);
19 subplot(2,4,4)
20 imshow(J2,[5 50])
21 title(旋转30度傅里叶频谱);
22 J=imrotate(I,60,bilinear,crop);%逆时针旋转60度
23 subplot(2,4,5);
24 imshow(J);
25 title(旋转60度后);
26 J1=fft2(J);
27 F=abs(J1);
28 J2=fftshift(F);
29 subplot(2,4,6)
30 imshow(J2,[5 50])
31 title(旋转60度傅里叶频谱);
32 J=imrotate(I,90,bilinear,crop);%逆时针旋转90度
33 subplot(2,4,7);
34 imshow(J);
35 title(旋转90度后);
36 J1=fft2(J);
37 F=abs(J1);
38 J2=fftshift(F);
39 subplot(2,4,8)
40 imshow(J2,[5 50])
41 title(旋转90度傅里叶频谱);

 

技术图片

2二维余弦正反变换

 1 I=imread(C:\\\\Users\\\\Administrator\\\\Desktop\\\\lenagray.jpg);
 2 subplot(1,3,1)
 3 imshow(I);
 4 title(原始图像)
 5 J=dct2(I);
 6 subplot(1,3,2)
 7 imshow(log(abs(J)),[]);
 8 title(余弦变换系数);
 9 k=idct2(J)/255;
10 subplot(133);
11 imshow(k);
12 title(余弦反变换恢复图像);

技术图片

3尺度变化

 

 1 I=zeros(256,256);
 2 I(8:248,110:136)=255;
 3 figure(1);
 4 imshow(I);
 5 J3=fft2(I);
 6 F2=abs(J3);
 7 F3=fftshift(F2);
 8 figure(2);
 9 imshow(F3,[5 30]);
10 a=0.1;
11 
12 for i=1:256
13     for j=1:256;
14         I(i,j)=I(i,j)*a;
15     end
16 end
17 J2=fft2(I);
18 F1=abs(J2);
19 J3=fftshift(F1);
20 figure(3);
21 imshow(J3,[5 30])

技术图片

技术图片

技术图片

当f(x,y)在水平方向进行扩展,相同间隔下频谱中u方向零点的数量也增加

4傅里叶变换实例

 

 1 I=imread(D:/picture/lenagray.jpg);
 2 figure;imshow(I);
 3 p=fft2(I);
 4 p=fftshift(p);
 5 figure;imshow(log(abs(p)),[8 10]);
 6 I1=imnoise(I,gaussian,0,0.01);
 7 figure;imshow(I1);
 8 p1=fft2(I);
 9 p1=fftshift(p1);
10 figure;imshow(log(abs(p1)),[8 10]);

 

 

技术图片技术图片

技术图片

技术图片

技术图片

figure1是原图figure2是原图的傅里叶频谱图(已经移中),

figure3是加了高斯噪声的lena图,及其对应的频谱图。

有一些关于频谱图的结论:中心白色区域是低频,但能量高,幅角大,中心之外的区域是黑色区域,对应的是高频,能量幅度小,

对于图像灰度变化缓慢的区域,对应它变换后的低频分量部分;图像灰度呈阶跃变换的区域,对应变换后的高频部分。除颗粒噪声外,图像细节的边缘、轮廓处都是灰度变化突出区域。他们都具有变换后的高频分量特征。我个人观点是图像的灰度值越小即越黑则对应的频谱中心区域越小,高频成分占的比重越高。

具体关于频谱的内容可以看一下这两篇博客

技术图片https://blog.csdn.net/Struggle_For_M/article/details/51207370
https://blog.csdn.net/ViatorSun/article/details/82387854

 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

注释一:

??1.  Y = fft(y);

2.  Y = fft(y,N);

式中,y是序列,Y是序列的快速傅里叶变换。y可以是一向量或矩阵,若y为向量,则Y是y的FFT,并且与y具有相同的长度。若y为一矩阵,则Y是对矩阵的每一列向量进行FFT。

注释二:

注释三:

  fft是一维傅里叶变换,即将时域信号转换为频域信号fftshift是针对频域的,将FFT的DC分量移到频谱中心

即对频域的图像,(假设用一条水平线和一条垂直线将频谱图分成四块)对这四块进行对角线的交换与反对角线的交换

  fft:对模拟信号进行变换,变换结果是左右对称的,有负频率,如下图(a)中的作图所示。

DFT的求和区间是0~N-1,DFT的物理意义是对fft的结果等间隔的采样N点,但是人为的规定0~N-1使得只采样了正频率,和fft结果不一致。由于fft的对称性或者说是周期性(见(b)的右图),所以可以以DFT结果以Fs/2为中心, 把Fs/2频率右半部分移到左半部分(即N/2~N-1)个点平移到负半轴,这样的结果的形状就同(a)中右面的图一致了,这也即是fftshift的原因。。其实是为了与fft结果一致。

技术图片

其他内容可参考:https://www.cnblogs.com/WHaoL/p/6595132.html  

 注释四:

imrotate函数说明

调用格式

编辑
B = imrotate(A,angle)
B = imrotate(A,angle,method)
B = imrotate(A,angle,method,bbox)
  

调用格式说明

B = imrotate(A,angle)
将图像A(图像的数据矩阵)绕图像的中心点旋转angle度, 正数表示逆时针旋转, 负数表示顺时针旋转。返回旋转后的图像矩阵。
B = imrotate(A,angle,method)
使用method参数可以改变插值算法,method参数可以为下面这三个值:
‘nearest‘:最邻近线性插值(Nearest-neighbor interpolation)
‘bilinear‘: 双线性插值(Bilinear interpolation)
‘bicubic‘: 双三次插值(或叫做双立方插值)(Bicubic interpolation)
B = imrotate(A,angle,method,bbox)
bbox参数用于指定输出图像属性:
‘crop‘: 通过对旋转后的图像B进行裁剪, 保持旋转后输出图像B的尺寸和输入图像A的尺寸一样。
‘loose‘: 使输出图像足够大, 以保证源图像旋转后超出图像尺寸范围的像素值没有丢失。 一般这种格式产生的图像的尺寸都要大于源图像的尺寸。技术图片

以上是关于图像变换的主要内容,如果未能解决你的问题,请参考以下文章

pyhton—opencv直线检测(HoughLines)找到最长的一条线

pyhton—opencv直线检测(HoughLines)找到最长的一条线

OpenCV图像线性变换(图像线性混合亮度和对比度增强线性变换API)

对视频剪辑应用灰度图像变换+Moviepy生成灰度视频处理遇到几个有意思的问题

利用傅立叶变换进行图像处理的代码演示

x264代码剖析(十五):核心算法之宏块编码中的变换编码