저는 matlab에서 Zhao Koch 스테 가노 그래피 방법을 파이썬으로 다시 작성하려고합니다. 시작시 바로 붙어 있습니다.파이썬에서 2D 이산 코사인 변환을 구현 한 Issiue
처음 두 절차들은 매트랩 그대로 :
단계 1 :
A = imread(casepath); # Reading stegonography case image and aquiring it's RGB values. In my case it's a 400x400 PNG image, so it gives a 400x400x3 array.
단계 2 :
D = dct2(A(:,:,3)); # Applying 2D DCT to blue values of the image
파이썬 코드 유사체 :
from scipy import misc
from numpy import empty,arange,exp,real,imag,pi
from numpy.fft import rfft,irfft
arr = misc.imread('casepath')# 400x480x3 array (Step 1)
arr[20, 30, 2] # Getting blue pixel value
def dct(y): #Basic DCT build from numpy
N = len(y)
y2 = empty(2*N,float)
y2[:N] = y[:]
y2[N:] = y[::-1]
c = rfft(y2)
phi = exp(-1j*pi*arange(N)/(2*N))
return real(phi*c[:N])
def dct2(y): #2D DCT bulid from numpy and using prvious DCT function
M = y.shape[0]
N = y.shape[1]
a = empty([M,N],float)
b = empty([M,N],float)
for i in range(M):
a[i,:] = dct(y[i,:])
for j in range(N):
b[:,j] = dct(a[:,j])
return b
D = dct2(arr) # step 2 anlogue
그러나 , 내가 execu하려고 할 때 코드에 다음과 같은 오류가 나타납니다.
Traceback (most recent call last):
File "path to .py file", line 31, in <module>
D = dct2(arr)
File "path to .py file", line 25, in dct2
a[i,:] = dct(y[i,:])
File "path to .py file", line 10, in dct
y2[:N] = y[:]
ValueError: could not broadcast input array from shape (400,3) into shape (400)
아마도 누군가 내가 잘못하고있는 것을 나에게 설명 할 수 있을까요?
추가 정보 : OS : 윈도우 10 프로 64 비트 파이썬 : 2.7.12 scipy : 0.18.1 NumPy와 : 1.11.2 베개 : 3.4.1
numpy와 scipy에서 ['dct()'] (http://stackoverflow.com/questions/34890585/in-scipy-why-doesnt-idctdcta-equal-to-a)에 직접 액세스 할 수 있습니다. 너 자신을 굴리는 대신에 흥미가 있니? – Reti43
감사합니다. 단지 그것에 대해 알지 못했습니다. 그것이 잘 작동하는 것 같습니다. –