首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >openCV中的离散余弦变换方程

openCV中的离散余弦变换方程
EN

Stack Overflow用户
提问于 2018-02-26 06:49:28
回答 2查看 213关注 0票数 0

我使用函数imdct在Scilab (相当于MATLAB)中编写JPEG压缩。在这个函数中使用的是openCV的DCT函数,我不知道在dct函数中使用的是哪个方程。

lenna by imdct

lenna by my_function

你可以在scilab中看到imdct的lenna,这是一个内部函数,而my_function的lenna是我的函数。

我将代码添加到scilab中

代码语言:javascript
复制
function vystup = dct_rovnice(vstup)

[M,N] = size(vstup) 

 for u=1:M 
     for v=1:N
        cos_celkem = 0; 

        for m=1:M 
            for n=1:N 
                pom = double(vstup(m,n)); 
                cos_citatel1 = cos(((2*m) * u * %pi)/(2*M));
                cos_citatel2 = cos(((2*n) * v * %pi)/(2*N));
                cos_celkem = cos_celkem + (pom * cos_citatel1 * cos_citatel2);
            end
        end

        c_u = 0;
        c_v = 0;

        if u == 1 then 
            c_u = 1 / sqrt(2);
        else
            c_u = 1;
        end  

        if v == 1 then 
            c_v = 1 / sqrt(2);
        else
            c_v = 1;
        end  

        vystup(u,v) = (2/sqrt(n*m)) * c_u * c_v * cos_celkem; 
    end
end

endfunction

function vystup = dct_prevod(vstup)

Y = vstup(:,:,1); 

Cb = vstup(:,:,2);

Cr = vstup(:,:,3);

[rows,columns]=size(vstup)

vystup = zeros(rows,columns,3)


for y=1:8:rows-7
    for x=1:8:columns-7 
        blok_Y = Y(y:y+7,x:x+7) 
        blok_Cb = Cb(y:y+7,x:x+7) 
        blok_Cr = Cr(y:y+7,x:x+7) 
        blok_dct_Y = dct_rovnice(blok_Y) 
        blok_dct_Cb = dct_rovnice(blok_Cb)  
        blok_dct_Cr = dct_rovnice(blok_Cr) 
        vystup(y:y+7,x:x+7,1)= blok_dct_Y 
        vystup(y:y+7,x:x+7,2)= blok_dct_Cb
        vystup(y:y+7,x:x+7,3)= blok_dct_Cr 
    end
end
vystup = uint8(vystup) 
endfunction

你可以看到方程式我用了EQUATION

EN

回答 2

Stack Overflow用户

发布于 2018-03-01 05:40:11

注意,dct函数有几种定义(DCT-I、DCT-II、DCT-III和DCT-IV标准化和非标准化)

此外,您是否尝试过Scilab内置函数dct (来自FFTW),它可以直接应用于图像。

票数 0
EN

Stack Overflow用户

发布于 2018-03-14 18:50:57

问题似乎在于使用不同的归一化结果系数。

OpenCV库使用此公式进行正向转换(在本例中为N=8):

基础g定义为

哪里

(对于难看的图像,很抱歉,但因此不提供任何排版公式的支持。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48979328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档