2017-11-30 16:22:42 zero0bobo 阅读数 3616
  • 携手STM32CubeMX玩转STM32

    本课程教大家如何利用STM32CubeMX玩转STM32(STM32CubeMX支持的所有型号MCU都适用于本课程)。课程内容分为基础内容和扩展内容,例如:讲解串口时会扩展开讲Xmodem通信协议,讲解ADC/DAC时会扩展讲傅里叶计算,讲解完FLASH操作会扩展将bootloader的编写,讲解完M3的bootloader编写会扩展讲解M0的bootloader...... 内容绝对实在,对于学习以及工作都会有很大的帮助。最终的目的就是让大家学会快速开发STM32并收获与STM32有关的实用技术知识。

    783 人正在学习 去看看 李凯龙
基本图像变换matlab仿真

1.傅里叶变换

1-1.MATLAB中的傅里叶变换函数
 fft , fft2 ,fftn 分别为一维,二维,n维的快速傅里叶变换函数;
ifft ,ifft2 ,ifftn 分别为一维,二维,n维的快速傅里叶反变换函数。

2.二维傅里叶变换的matlab实现

2-1.实现语句为B=fft2(A)
2-2.变换程序为
课本例题
>> N=100;
>> f=zeros(50,50);%将f定义为一个50*50的零矩阵
>> f(5:35,23:28)=1;%将矩阵第5行到35行,第23列到28列赋值为1
>> figure,imshow(f,'InitialMagnification','fit');%显示图片,且调整图片大小适应窗口
>> F=fft2(f,N,N);%将[50 50]的矩阵填入[100 100]中并进行傅里叶变换
>> F2=fftshift(abs(F));%对F取绝对值并将其频谱移至中心
>> figure;
>> x=1:N;y=1:N;
>> mesh(x,y,F2(x,y));%显示三维网视图
>> colormap(cool);colorbar%调整颜色
>> colormap(jet);colorbar

矩形连续函数及其傅里叶变换赋值


对于傅里叶变换的结果,还有一种显示方式:即对结果取对数。例如F=fft2(f); F2=log(abs(F);

或B=fft2(f); imshow(log(abs(B)),[]); title('B');

3.离散余弦变换

3-1.DCT变换函数

(1)、dct2函数 语法格式 B=dct2(A)

或 B=dct2(A,m,n) B=dct2(A,[mn])意为在对图像变换前改变图像大小为[m n],不够补零,多余剪切。

(2)、idct2函数 语法格式 B=idct2(A)

或 B=idct2(A,m,n) B=i(A,[mn])

(3)、dctmtx函数  语法格式D=dctmtx(n)

对于A很大时,比dct2计算快

余弦变换是傅里叶变换的特例,由于变换的结果只含余弦项,故称余弦变换。

余弦变换已广泛应用于数字信号处理,如图像压缩编码语音信号处理等方面。

3-2变换程序

%二维离散余弦变换
clc,clear
I = imread('lena1.tiff');
figure,imshow(I)
J = dct2(I);
figure,imshow(log(abs(J)),[]) %舍掉绝对值小于10的值(对数增强)
J(abs(J) < 10) = 0;
figure,imshow(log(abs(J)),[])
K = idct2(J);
figure,imshow(uint8(K),[])


基础函数用法:

Imrotate的语法格式为:

B =imrotate(A,angle,method )

函数imrotate对图像进行旋转,参数method用于指定插值的方法,,可选用的值为'nearest'(最邻近法),'bilinear'(双线性插值),'bicubic'(双三次插值),默认为'nearest'。一般说来旋转后的图像会比原图大,超出原图部分值为0。 例:

I=imread('rice.tif');

J=imrotate(I,30,'bilinear');imshow(I);title('原图像')

figure,imshow(J),title('旋转后的图像')

函数imnoise():给图像加入噪声。

imnoise的语法格式为

J = imnoise(I,type)

J = imnoise(I,type,parameters)

其中J = imnoise(I,type)返回对原始图像I添加典型噪声的有噪图像J。

参数type和parameters用于确定噪声的类型和相应的参数。常见的几种:

J=imnoise(I,'gaussian',m,var)将均值m,方差为var的高斯噪声加到图像I上,默认值为均值是0,方差是0.01的噪声。

J=imnoise(I,'salt & pepper',d)用椒盐噪声污染图像I,其中d是噪声密度(即包括噪声值的图像区域的百分比)。默认的噪声密度为0.005。J=imnoise(I,'speckle',var)用方程J=I+n*I将乘性噪声添加到图像I上,其中n是均值为0,方差为var的均匀分布的随机噪声,var的默认值是0.04。

FOR 语句

代数运算中需要有若干幅带有随机噪声的图像数据,在这里我们运用MATLAB中的FOR循环语句来完成产生多幅带有噪声的图像数据及将这些图像数据进行相加运算。MATLAB中FOR END循环的用法如下:

这种循环允许一组命令以固定的和预定的次数重复,循环的一般形式为:

for  variable = expression

statements

end

(im2)double

在实际的对图像处理过程中,由于我们读出的图像是unit8型,而在MATLAB的矩阵运算中要求所有的运算变量为double型(双精度型)。因此读出的图像数据不能直接进行相加求平均,因此必须使用一个函数将图像数据转换成双精度型数据。MATLAB中提供了这样的函数:

im2double函数,其语法格式为:

I2=im2double(I1)

其中I1是输入的图像数据,它可能是uint8或uint16型数据,通过函数的变化输出I2为一个double型数据且值在0~1之间(0对应无符号8位数的0,1对应无符号8位数的255),这样两图像数据就可以方便的进行相加等代数运算.



2018-12-09 23:06:23 wuyi0105 阅读数 2286
  • 携手STM32CubeMX玩转STM32

    本课程教大家如何利用STM32CubeMX玩转STM32(STM32CubeMX支持的所有型号MCU都适用于本课程)。课程内容分为基础内容和扩展内容,例如:讲解串口时会扩展开讲Xmodem通信协议,讲解ADC/DAC时会扩展讲傅里叶计算,讲解完FLASH操作会扩展将bootloader的编写,讲解完M3的bootloader编写会扩展讲解M0的bootloader...... 内容绝对实在,对于学习以及工作都会有很大的帮助。最终的目的就是让大家学会快速开发STM32并收获与STM32有关的实用技术知识。

    783 人正在学习 去看看 李凯龙

图像处理领域离散傅里叶变换的作用

将图像由时空域,转换为频域

二维离散傅里叶变换

二维离散傅里叶变换公式

二维离散傅里叶变换公式

将二维的离散傅里叶变换进行转化

将不好处理的二维离散傅里叶变换转化为进行两次一维处理
先处理行,再处理列
二维离散傅里叶转化为两次一维处理
公式如下:
二维离散傅里叶变换公式

将系数转化为矩阵形式

在这里插入图片描述

注意,从矩阵的乘积i形式可以看出,原来是N个值,输出后依然是N个值,而且要注意,输出的N个值的每一个值和输入得每一个值都有关系。换句话说,输出的F(0),F(1),F(2)…F(N),之中的每一个值,比如F(1),都需要,输入的所有值做贡献。
f(x)的全部值对离散的傅氏变换四项中的每一项都产生影响。反之亦然。

所以按照刚才将维的思路,进行矩阵的操作。
权值矩阵A,原函数矩阵FF

采用88的DFT操作,对每一个88图像块,进行一次操作

matlab代码

N=8;
A=zeros(N);
for k=0:N-1
    for m=0:N-1
        A(k+1,m+1)=(1/N)*exp(-2*pi*i*(k*m/N));%8*8的 w 的矩阵
    end
end

[Hh,Hw]=size(WYY);
X=ceil(Hw/8)*8;
Y=ceil(Hw/8)*8;
hall_new=zeros(X,Y);
hall_new(1:Hh,1:Hw)=WYY;%把Y分量赋值进去
%hall_new(Hh+1:X,1:Hw)=repmat(WYY(Hh,1:Hw),X-Hh,1);
%hall_new(1:Hh,Hw+1:Y)=repmat(WYY(1:Hh,Hw),1,Y-Hw);
m=X/8;%行块数
n=Y/8;%列块数
for i1=1:m
     for i2=1:n
         FF=double(hall_new((i1-1)*8+1:i1*8,(i2-1)*8+1:i2*8));%按顺序取8*8的每一块
         BB((i1-1)*8+1:i1*8,(i2-1)*8+1:i2*8)=N*A*FF*A';%DFT变换,变成两次一维度处理,另一个函数,先处理一行,一行的8个值都会产生影响,以行和列为整体看
         KK((i1-1)*8+1:i1*8,(i2-1)*8+1:i2*8)=A'*BB((i1-1)*8+1:i1*8,(i2-1)*8+1:i2*8)*A;%DFT反变换
     end
end

未完待续

2011-06-14 20:59:00 ssz912728941 阅读数 991
  • 携手STM32CubeMX玩转STM32

    本课程教大家如何利用STM32CubeMX玩转STM32(STM32CubeMX支持的所有型号MCU都适用于本课程)。课程内容分为基础内容和扩展内容,例如:讲解串口时会扩展开讲Xmodem通信协议,讲解ADC/DAC时会扩展讲傅里叶计算,讲解完FLASH操作会扩展将bootloader的编写,讲解完M3的bootloader编写会扩展讲解M0的bootloader...... 内容绝对实在,对于学习以及工作都会有很大的帮助。最终的目的就是让大家学会快速开发STM32并收获与STM32有关的实用技术知识。

    783 人正在学习 去看看 李凯龙

f=[4,2;3,4];
[M,N]=size(f);
F=zeros(M,N);
j=sqrt(-1);
for u=1:M
    for v=1:N
        for h=1:M
            for k=1:N
                F(u,v)=F(u,v)+f(h,k)*exp(-2*pi*j*((u-1)*(h-1)/M+(v-1)*(k-1)/N));
            end
        end
    end
end
F

 

输出结果: 

2019-10-13 15:47:58 weixin_44225182 阅读数 192
  • 携手STM32CubeMX玩转STM32

    本课程教大家如何利用STM32CubeMX玩转STM32(STM32CubeMX支持的所有型号MCU都适用于本课程)。课程内容分为基础内容和扩展内容,例如:讲解串口时会扩展开讲Xmodem通信协议,讲解ADC/DAC时会扩展讲傅里叶计算,讲解完FLASH操作会扩展将bootloader的编写,讲解完M3的bootloader编写会扩展讲解M0的bootloader...... 内容绝对实在,对于学习以及工作都会有很大的帮助。最终的目的就是让大家学会快速开发STM32并收获与STM32有关的实用技术知识。

    783 人正在学习 去看看 李凯龙

傅里叶变换实现图像压缩

题目
首先将图像分割为8x8的子图像,对每个子图像进行FFT.对每个子图像中的64个系数,排序后,舍去小的变换系数,只保留靠前的16个系数,实现4: I的图像压缩。

代码

t=imread('a6.jpg');
t=rgb2gray(t);%灰度化
[k,p]=size(t);
t=double(t)/255;%归一化 便于计算

%显示原图
imshow(t),title('原图','fontsize',16);

%利用blkproc 进行分块 并对每一块进行fft操作
t_fft=blkproc(t,[8 8],'fft2(x)');

%利用im2col进行优化操作 便于计算
t_block=im2col(t_fft,[8 8],'distinct');
[t_change,ix]=sort(t_block);%对每一块图像进行排序
[m,n]=size(t_block);

cr=0.75; %压缩比
nums=64-64*cr;

%对后48位系数清零
for i=1:n
 t_block(ix(1:nums),i)=0;
end

t_rchange=col2im(t_block,[8 8],[k p],'distinct');
t_ifft=blkproc(t_rchange,[8 8],'ifft2(x)');%对每一块进行傅里叶反变换

figure,
imshow(t_ifft),title('8:1压缩后','fontsize',16);

效果
在这里插入图片描述
在这里插入图片描述

2016-04-21 15:02:55 qq_30028077 阅读数 663
  • 携手STM32CubeMX玩转STM32

    本课程教大家如何利用STM32CubeMX玩转STM32(STM32CubeMX支持的所有型号MCU都适用于本课程)。课程内容分为基础内容和扩展内容,例如:讲解串口时会扩展开讲Xmodem通信协议,讲解ADC/DAC时会扩展讲傅里叶计算,讲解完FLASH操作会扩展将bootloader的编写,讲解完M3的bootloader编写会扩展讲解M0的bootloader...... 内容绝对实在,对于学习以及工作都会有很大的帮助。最终的目的就是让大家学会快速开发STM32并收获与STM32有关的实用技术知识。

    783 人正在学习 去看看 李凯龙

本文主要介绍的是傅里叶变换在图像处理当中的应用。本文参考:http://blog.csdn.net/masibuaa/article/details/6316319

第一部分介绍傅里叶变换。傅里叶变换是将时域信号分解为不同频率的正弦信号或余弦函数叠加之和。连续情况下要求原始信号在一个周期内满足绝对可积条件。离散情况下,傅里叶变换一定存在。冈萨雷斯版<图像处理>里面的解释非常形象:一个恰当的比喻是将傅里叶变换比作一个玻璃棱镜。棱镜是可以将光分解为不同颜色的物理仪器,每个成分的颜色由波长(或频率)来决定。傅里叶变换可以看作是数学上的棱镜,将函数基于频率分解为不同的成分。当我们考虑光时,讨论它的光谱或频率谱。同样,傅立叶变换使我们能通过频率成分来分析一个函数。

简单的来说,对一副图像使用傅里叶变换就是将它分解成正弦和余弦两部分,也就是将图像从空间域转到频域。傅里叶变换就是一个用来将函数分解的工具。

第二部分是介绍DFT在图像处理中的主要应用

(1)图像增强与图像去燥

绝大部分噪声都是图像的高频分量,可以通过低通滤波器来滤除高频噪声,边缘也是图像的高频分量,可以通过添加高频分量来增强原始图像的边缘。

(2)图像边缘检测

利用傅里叶变化检测图像的变换纹理,主要是提取图像的高频分量

(3)图像的特征提取

主要用于提取图像的形状特征,纹理特征等

(4)图像压缩

可以直接通过傅里叶系数来压缩数据,常用的离散余弦变换是傅里叶变换的实变换。

(以上摘自MATLAB应用实例精讲)




https://www.cnblogs.com/h2zZhou/p/8405717.html

博文 来自: weixin_44225182
没有更多推荐了,返回首页