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

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()
效果图如下:



猜你喜欢

转载自blog.csdn.net/James_Ray_Murphy/article/details/79172583