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