您的位置:首页 > 其它

基于Pyhton的二维离散正弦变换(DST)及其反变换(IDST)

2018-01-26 15:21 519 查看
1.二维离散正弦变换(DST)的矩阵形式可以表示为:



其中T为DST变换后的矩阵,I为输入矩阵,C为变换基,C的表示为:



2.二维离散正弦反变换(IDST)可以表示为:



DST和DCT一样,能够把数据能量集中在矩阵的左上角,可以用于图像压缩存储。

Python程序:

#二维图像的离散正弦变换(DST)
#Python3.5
#库:cv2+numpy+matplotlib
#作者:James_Ray_Murphy

import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('baoguo1.jpg', 0)

img1 = img.astype('float')

C_temp = np.zeros(img.shape)
dst = np.zeros(img.shape)

m, n = img.shape
N = n
for i in range(m):
for j in range(n):
C_temp[i, j] = np.sin(np.pi * (i+1) * (j+1) / (N + 1)
) * np.sqrt(2 / (N + 1))

dst = np.dot(C_temp , img1)
dst = np.dot(dst, np.transpose(C_temp))
dst1= np.log(abs(dst)) #进行log处理

img_recor = np.dot(np.transpose(C_temp) , dst)
img_recor = np.dot(img_recor, C_temp)

plt.subplot(131)
plt.imshow(img1, 'gray')
plt.title('original image')
plt.xticks([]), plt.yticks([])

plt.subplot(132)
plt.imshow(dst1)
plt.title('DST')
plt.xticks([]), plt.yticks([])

plt.subplot(133)
plt.imshow(img_recor, 'gray')
plt.title('IDST')
plt.xticks([]), plt.yticks([])

plt.show()
效果图如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  DST 离散正弦变换