# 简单图像处理——傅立叶变换

import cv

def FFT(image,flag = 0):
w
= image.width
h
= image.height
iTmp
= cv.CreateImage((w,h),cv.IPL_DEPTH_32F,1)
cv.Convert(image,iTmp)
iMat
= cv.CreateMat(h,w,cv.CV_32FC2)
mFFT
= cv.CreateMat(h,w,cv.CV_32FC2)
for i in range(h):
for j in range(w):
if flag == 0:
num
= -1 if (i+j)%2 == 1 else 1
else:
num
= 1
iMat[i,j]
= (iTmp[i,j]*num,0)
cv.DFT(iMat,mFFT,cv.CV_DXT_FORWARD)
return mFFT

def FImage(mat):
w
= mat.cols
h
= mat.rows
size
= (w,h)
= cv.CreateImage(size,cv.IPL_DEPTH_8U,1)
for i in range(h):
for j in range(w):
= mat[i,j][1]/h + mat[i,j][0]/h

image
mAfterFFT
= FFT(image)
mBeginFFT
= FFT(image,1)
iAfter
= FImage(mAfterFFT)
iBegin
= FImage(mBeginFFT)

cv.ShowImage(
'image',image)
cv.ShowImage(
'iAfter',iAfter)
cv.ShowImage(
'iBegin',iBegin)

cv.WaitKey(0)

import cv

def FFT(image,flag = 0):
w
= image.width
h
= image.height
iTmp
= cv.CreateImage((w,h),cv.IPL_DEPTH_32F,1)
cv.Convert(image,iTmp)
iMat
= cv.CreateMat(h,w,cv.CV_32FC2)
mFFT
= cv.CreateMat(h,w,cv.CV_32FC2)
for i in range(h):
for j in range(w):
if flag == 0:
num
= -1 if (i+j)%2 == 1 else 1
else:
num
= 1
iMat[i,j]
= (iTmp[i,j]*num,0)
cv.DFT(iMat,mFFT,cv.CV_DXT_FORWARD)
return mFFT

def IFFT(mat):
mIFFt
= cv.CreateMat(mat.rows,mat.cols,cv.CV_32FC2)
cv.DFT(mat,mIFFt,cv.CV_DXT_INVERSE)
return mIFFt

def Restore(mat):
w
= mat.cols
h
= mat.rows
size
= (w,h)
iRestore
= cv.CreateImage(size,cv.IPL_DEPTH_8U,1)
for i in range(h):
for j in range(w):
num
= -1 if (i+j)%2 == 1 else 1
iRestore[i,j]
= mat[i,j][0]*num/(w*h)
return iRestore

def FImage(mat):
w
= mat.cols
h
= mat.rows
size
= (w,h)
# iReal = cv.CreateImage(size,cv.IPL_DEPTH_8U,1)
# iIma = cv.CreateImage(size,cv.IPL_DEPTH_8U,1)
for i in range(h):
for j in range(w):
# iReal[i,j] = mat[i,j][0]/h
# iIma[i,j] = mat[i,j][1]/h

def Filter(mat,flag = 0,num = 10):
mFilter
= cv.CreateMat(mat.rows,mat.cols,cv.CV_32FC2)
for i in range(mat.rows):
for j in range(mat.cols):
if flag == 0:
mFilter[i,j]
= (0,0)
else:
mFilter[i,j]
= mat[i,j]
for i in range(mat.rows/2-num,mat.rows/2+num):
for j in range(mat.cols/2-num,mat.cols/2+num):
if flag == 0:
mFilter[i,j]
= mat[i,j]
else:
mFilter[i,j]
= (0,0)
return mFilter

image
mFFT
= FFT(image)
mIFFt
= IFFT(mFFT)
iAfter
= FImage(mFFT)
mLP
= Filter(mFFT)
mIFFt1
=IFFT(mLP)
iLP
= FImage(mLP)
iRestore
= Restore(mIFFt1)

mHP
= Filter(mFFT,1)
mIFFt2
= IFFT(mHP)
iHP
= FImage(mHP)
iRestore2
= Restore(mIFFt2)

cv.ShowImage(
'image',image)
cv.ShowImage(
'iAfter',iAfter)
cv.ShowImage(
'iLP',iLP)
cv.ShowImage(
'iHP',iHP)
cv.ShowImage(
'iRestore',iRestore)
cv.ShowImage(
'iRestore2',iRestore2)

cv.WaitKey(0)

• 本文已收录于以下专栏：

## 解读图像傅里叶变换

• maryhuan
• 2014年03月21日 10:35
• 1220

## MATLAB 傅里叶变换 图像锐化 代码

• 2014年04月24日 20:47
• 178KB
• 下载

## 图像处理中的傅里叶变换

• m0_37264397
• 2017年04月15日 19:34
• 3575

## 图像处理----傅里叶变换

• wxcdzhangping
• 2014年05月14日 10:13
• 1998

## 傅里叶变换简单理解

【转载】http://blog.sina.com.cn/s/blog_6923201d010120zl.html 【转载】http://blog.csdn.net/goodshot/articl...
• zhengtu009
• 2014年11月04日 10:44
• 975

## matlab 实现数字图像的傅立叶变换及滤波锐化

• hzh_csdn
• 2016年11月21日 23:03
• 1988

## 图像锐化和边缘检测

From: http://dsqiu.iteye.com/blog/1638589
• djzhao
• 2016年06月14日 16:01
• 377

## 图像处理之_傅立叶变换

• xieyan0811
• 2017年05月09日 13:03
• 341

## 图像处理傅立叶变换

• u011440696
• 2016年12月13日 14:12
• 121

## MFC数字图像处理（BMP格式读取 保存 DFT FFT 直方图 色调均化 缩放 模糊 锐化 滤镜 形态学处理 曲线 裁剪 灰度图 彩色图 自动阈值）

• 2014年07月23日 10:40
• 7.76MB
• 下载

举报原因： 您举报文章：简单图像处理——傅立叶变换 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)