fft qt 代码_QT实现图像处理-傅立叶变换、傅立叶反变换、平滑、锐化与模板匹配...

本文介绍了使用QT3和C++在Linux环境下实现图像处理的几个关键步骤,包括傅立叶变换、傅立叶反变换、图像平滑、锐化和模板匹配。详细阐述了读取和写入图像数据、快速傅立叶变换(FFT)及快速傅立叶反变换(IFFT)的递归实现,并展示了不同操作对图像的影响,如正方形、旋转45度的图像和平长方形图像的变换结果。此外,还提供了平滑和锐化的模板计算方法以及模板匹配算法,用于比较和查找目标图像中与模板最相似的区域。
摘要由CSDN通过智能技术生成

实验环境:

1,Linux操作系统

2,QT3编程开发环境

3,C++编程语言

傅立叶变换和傅立叶反变换

1.1. 主要源代码

readImage() 从图像中读取数据

writeImage() 往图像中写入数据

fft() 快速傅立叶变换

ifft() 快速傅立叶反变换

adjustImageSize() 调整图像大小

fourier() 傅立叶变换

ifourier() 傅立叶反变换

1.1.1从图像中读取数据

void ImageProcess::readImage(complex data[], const QImage &srcImage)

{

byte *pImageBytes = srcImage.bits(); //数据首地址

int depth = srcImage.depth(); //每个像素的bit数

int lineBytes = srcImage.bytesPerLine(); //每行的字节数

int w = srcImage.width(); //宽

int h = srcImage.height(); //高

byte *pByte;

//遍历读取每个像素,并转换为灰度值

int i, j;

for(i = 0; i < h; i++)

{

for(j = 0; j < w; j++)

{

if(8 == depth) //采用了256色调色板,8位颜色索引

{

pByte = pImageBytes + i * lineBytes + j;

data[i * w + j] = complex( *pByte, 0);

}

else if(32 == depth)//32位表示,数据格式为0xFFBBGGRR或0xAABBGGRR

{

pByte = pImageBytes + i * lineBytes + j * 4;

//根据RGB模式转化成YIQ色彩模式的方式,取Y作为灰度值

byte pixelValue = (byte)(0.299 * (float)pByte[0] + 0.587 * (float)pByte[1]

+ 0.114 * (float)pByte[2]);

data[i * w + j] = complex( pixelValue, 0);

}

else

{

cout << "invalid format. depth = " << depth << "\n";

return;

}

}

}

}

1.1.2将数据写入图像

//coef为比例系数,主要用来调整灰度值以便于观察

void ImageProcess::writeImage(QImage &destImage, const complex data[], double coef)

{

int lineBytes = destImage.bytesPerLine();

int depth = destImage.depth();

int w = destImage.width();

int h = destImage.height();

byte *pImageBytes = destImage.bits();

byte *pByte;

for(int i = 0; i < h; i++)

{

for(int j = 0; j < w; j++)

{

double spectral = abs(data[i * w + j]) * coef; //灰度值调整

spectral = spectral > 255 ? 255 : spectral;

//根据图像格式写数据

if(8 == depth)

{

pByte = pImageBytes + i * lineBytes + j;

*pByte = spectral;

}

else if(32 == depth)

{

pByte = pImageBytes + i * lineBytes + j * 4;

pByte[0] = pByte[1] = pByte[2] = spectral;

}

else

{

return;

}

}

}

}

1.1.3递归形式的快速傅立叶变换

//数组a为输入,数组y为输出,2的power

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值