二維DCT變換 Python實現

2022-06-21 05:00:12 字數 1221 閱讀 2681

# -*- coding:utf-8 -*-

# author:konmu

# dct二維變換

from numpy import array as matrix, arange,zeros,transpose,matmul,ones

from math import sqrt,cos,pi

'''作業代轉化矩陣1

a=matrix([[0,255,0,255,0,255,0,255],

[255,0,255,0,255,0,255,0],

[0,255,0,255,0,255,0,255],

[255,0,255,0,255,0,255,0],

[0,255,0,255,0,255,0,255],

[255,0,255,0,255,0,255,0],

[0,255,0,255,0,255,0,255],

[255,0,255,0,255,0,255,0]])

'''a=ones((8,8))#生成單位陣

for i in range(8):

a[i]=matrix([128]*8)

# 生成全是128的矩陣(作業代轉化矩陣2)

'''測試資料

a=matrix([[61,19,50,20],

[82,26,61,45],

[89,90,82,43],

[93,59,53,97]])

'''a=zeros((8,8))#生成0矩陣

shape=a.shape[1]#獲取維數

for i in range(8):

for j in range(8):

if(i == 0):

x=sqrt(1/shape)

else:

x=sqrt(2/shape)

a[i][j]=x*cos(pi*(j+0.5)*i/shape)#與維數相關

a_t=a.transpose()#矩陣轉置

y1=matmul(a,a)#矩陣叉乘

y=matmul(y1,a_t)

print(y)

'''想要近似值可以嘗試這樣輸出

for i in range(shape):

for j in range(shape):

print(''.format(y[i][j]),end='\n')

print()

'''

二維DCT變換

出處 dct,又叫離散預先變換,它的第二種型別,經常用於訊號和影象資料的壓縮。經過dct變換後的資料能量非常集中,一般只有左上角的數值是非零的,也就是能量都集中在離散余弦變換後的直流和低頻部分。1,一維dct變換 我們首先看著一維的dct變換,這是二維的基礎。一維的dct變換共有8種,其中最實用的是...

DCT變換及matlab實現

一維的dct變換共有8種,其中最實用的是第二種形式,公式如下 其中c u 是加上去乙個係數,為了能使dct變換矩陣成為正交矩陣,在後面二維變換將看到他的作用。n是f x 的總數。相比其他幾種形式,他的運算還是比較簡單的,因此也用的比較廣。clc clear in 1 8 n 8 for i 0 n ...

二維傅利葉變換需知

from 如下,這個 是實現灰度影象作二維傅利葉變換後的非線性變換哈 clear all i imread coins.png f fft2 im2double i f fftshift f f abs f t log f 1 subplot 1,2,1 imshow f,title 未經變換的頻譜...