精华内容
下载资源
问答
  • 数字图像处理DCT矩阵分块变换matlab程序 数字图像处理DCT矩阵分块变换matlab程序 数字图像处理DCT矩阵分块变换matlab程序 数字图像处理DCT矩阵分块变换matlab程序
  • 使用给定块大小顺序的 dct 矩阵对灰度图像和 DCT 执行非正弦图像变换。 重建的图像与描述变换是无损的原始图像完全相同。 此外,转换中还包含了生成 walsh、slant 和 haar 矩阵的代码。
  • 压缩感知中DCT变换矩阵的构造

    千次阅读 2016-04-07 20:34:02
    在视频压缩感知领域,信号的稀疏表示始终都是一个很核心的问题,在OMP算法...考虑到这些算法代码中DCT矩阵的构造都显得晦涩难懂而且基于定义构造的DCT变换矩阵和它们的功能又完全一样(且更容易理解),因此我们从DCT的

    在视频压缩感知领域,信号的稀疏表示始终都是一个很核心的问题,在OMP算法和BCS-SPL算法等算法中,都会涉及到DCT变换矩阵的构造,但是其往往和我们所了解的DCT变换的定义(DCT变换的定义可以参考之前的博文离散傅立叶变换DFT和离散余弦变换DCT)有所不同。

    考虑到这些算法代码中DCT矩阵的构造都显得晦涩难懂而且基于定义构造的DCT变换矩阵和它们的功能又完全一样(且更容易理解),因此我们从DCT的定义出发给出DCT变换矩阵的构造代码。

    一维DCT变换矩阵

    参考之前的博文离散傅立叶变换DFT和离散余弦变换DCT中一维DCT的定义可以得到如下实现代码(直接拷贝保存为.m文件即可在MATLAB环境中使用):

    function [Phi] = DCT_1D_Matrix(m)
    
    %
    %
    % 该函数产生1维DCT-II变换矩阵,左乘对信号进行DCT-II变换,转置后左乘对信号进行IDCT-II逆变换
    % 输入参数:
    %           m:信号的长度
    % this function return 2D DCT-II transform matrix,
    %       
    %       left multiply: transform the signal into dct domain
    %
    %       transpose and left multiply: transform the coefficient into
    %       pixel domian
    %
    % Input parameters:
    %           m: the number of signal
    % 
    % Programmer: Li Wenhao
    % School: Electronic and information school
    % University: South China University of Technology
    % Date: 4/7/2016
    %
    
    Phi = zeros(m,m);
    
     for k = 1:m
         for n = 1:m
             Phi(k,n) = cos((2*n-1)*(k-1)*pi/(2*m));
         end
         if k==1
             Phi(k,:) = sqrt(1/m).*Phi(k,:);
         else
            Phi(k,:) = sqrt(2./m).*Phi(k,:);
         end
     end

    注意:该矩阵左乘信号进行DCT变换,转置后左乘进行反变换!

    说明:输入处理向量的长度即可得到一维DCT变换矩阵。

    二维DCT变换矩阵

    参考之前的博文离散傅立叶变换DFT和离散余弦变换DCT中二维DCT的定义可以得到如下实现代码(直接拷贝保存为.m文件即可在MATLAB环境中使用):

    function [Phi] = DCT_2D_Matrix(m,n)
    
    %
    %
    % 该函数产生2维DCT-II变换矩阵,左乘对信号进行DCT-II变换,转置后左乘对信号进行IDCT-II逆变换
    % 输入参数:
    %           m:信号的行数
    %           n:信号的列数
    % this function return 2D DCT-II transform matrix,
    %       
    %       left multiply: transform the signal into dct domain
    %
    %       transpose and left multiply: transform the coefficient into
    %       pixel domian
    % 
    % Input parameters:
    %           m: the number of row
    %           n: the number of col
    %
    % Programmer: Li Wenhao
    % School: Electronic and information school
    % University: South China University of Technology
    % Date: 4/7/2016
    %
    
    
    Phi = zeros(m*n,m*n);
    
    temp = zeros(m,n);
    
    for i = 1:m
        for j = 1:n
    
            for p = 1:m
                for q = 1:n
                    temp(p,q) = cos((2*p-1)*(i-1)*pi/(2*m))*cos((2*q-1)*(j-1)*pi/(2*n));
                end
            end
    
            if i==1
                temp = sqrt(1/m).*temp;
            else
                temp = sqrt(2/m).*temp;
            end
            if j==1
                temp = sqrt(1/n).*temp;
            else
                temp = sqrt(2/n).*temp;
            end
            Phi((j-1)*m+i,:) = temp(:)';
        end
    end
    

    注意:该矩阵左乘信号进行DCT变换,转置后左乘进行反变换!

    说明:一般我们输入二维信号的长和宽,然后通过上述代码得到其二维DCT变换矩阵,然后通过该矩阵对信号的列化向量进行正反变换处理,二维变换系数矩阵可以通过reshape对一维的列化的系数进行处理得到。

    为什么反变换是其转置

    基于公式的理论分析

    参考之前的博文离散傅立叶变换DFT和离散余弦变换DCT中一维和二维DCT的定义可以知道:

    1. 在一维DCT正变换中,我们构造的矩阵的每一行的u都是一个定值,但是在反变换中,对参数u进行累加因此是个变量,所以将其转置即是其反变换;

    2. 在二维 DCT正变换中,我们构造的矩阵的每Nv都是一个定值,然而C(u,v)列化之后每N个元素的v都是一个定值,因此根据矩阵相乘的关系可以知道其转置即是其反变换;

    基于代码的验证

    通过上述代码分别产生一维的矩阵P和二维的矩阵Q,然后在MATLAB中分别计算P'*PQ'*Q然后观察其结果是否为单位矩阵。为单位矩阵则说明反变换是其转置。

    总结

    OMP算法和BCS-SPL算法中分别使用了一维和二维的DCT变换矩阵,通过使用我们的矩阵进行替换然后仿真,其结果完全一致,这正好说明不同的DCT变换矩阵的功能是完全一样的,所以以后就可以使用我们自己构造的DCT变换矩阵。

    展开全文
  • DCT_CS 稀疏矩阵

    2014-01-06 19:05:44
    压缩感知的matlab程序,稀疏矩阵DCT,恢复算法OMP
  • dct来检测待测图像中是否含有秘密信息的存在,该方法对jphide,f5等的检测效果良好
  • 上一篇博文提到了离散傅里叶变换,地址如下:...因为,DCT只取了DFT中的实部,对于很多应用来说,既方便又简洁,没有复数域捣乱。不像DFT,画个图还要考虑实部虚部,幅值相位神马的。但是,也...

    上一篇博文提到了离散傅里叶变换,地址如下:

    http://blog.sina.com.cn/s/blog_7445c2940102wcdj.html

    其实,离散余弦变换(DCT)就是离散傅里叶变换(DFT)的一部分,那么既然已经有了DFT,为什么还需要DCT呢?因为,DCT只取了DFT中的实部,对于很多应用来说,既方便又简洁,没有复数域捣乱。不像DFT,画个图还要考虑实部虚部,幅值相位神马的。但是,也就意味着DCT相比DFT包含的信息要少。同之前一样,我们先给出DCT的变换公式:

    a4c26d1e5885305701be709a3d33442f.png公式1

    ​​同DFT变换一样,我们也要考虑到离散与连续的区别,具体我就不在赘述,可以查看前一篇博客。

    我们将上式向量化,得到如下公式:​

    a4c26d1e5885305701be709a3d33442f.png离散余弦变换矩阵

    ​​同理,可以得到IDCT变换矩阵:

    a4c26d1e5885305701be709a3d33442f.png离散余旋反变换矩阵

    ​matlab程序如下:

    1.正变换:

    N=width;

    dctmtx=zeros(N);

    dctmtx(1,:)=ones(1,N)/sqrt(N);

    �T第一行为常数

    for k=1:N-1

    dctmtx(k+1,:)=sqrt(2)*cos((2*(0:N-1)+1)*k*pi/(2*N))/sqrt(N);

    %生成X(1)到X(N-1)一共N个

    end

    2.反变换:

    N=width;

    idctmtx=zeros(N);

    idctmtx(:,1)=ones(N,1)/sqrt(N);

    %idct矩阵第一列为常数与C(0)相乘

    for n=0:width-1

    idctmtx(n+1,2:N)=cos((2*n+1)*(1:N-1)*pi/(2*N))*sqrt(2)/sqrt(N);

    end

    ​总结一下,DCT是取DFT的实部,也就可以通过DFT得到DCT,只不过先要将信号延展到2N-1。那么DFT的虚部是否也可以组成一个变换基底呢?答案是可以得,也就是离散正弦变换(DST)。但是在应用中很少见到DST,这是为什么呢?

    展开全文
  • 为了加深对Feig算法的理解和进一步提出更好的快速算法,首先使用简单的矩阵分解理沦来得到Feig的算法和另外3种不同形式的矩阵分解;然后,对Feig的Scaled-DCT算法做进一步研究,消去了其中隐含的49个求相反数的多余...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼作为一个直接抄代码的人,跪求大神指点Pi=[5554 869 4807 2050 871];Aj=[5554 869 4838 2165 819];fij=[10 50 90 150 200;50 20 60 140 190;90 60 30 120 190;...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    作为一个直接抄代码的人,跪求大神指点

    Pi=[5554 869 4807 2050 871];

    Aj=[5554 869 4838 2165 819];

    fij=[10 50 90 150 200;

    50 20 60 140 190;

    90 60 30 120 190;

    150 140 120 40 200;

    200 190 190 200 50];

    k2jX=ones(1,5);k1iX=ones(5,1);

    lij=zeros(5,5);

    k1i=zeros(5,1);k2j=zeros(1,5);

    n=1;

    for i=1:5

    k1i(i)=1/sum(k2jX.*Aj.*fij(i,1:5));

    end

    for j=1:5

    k2j(j)=1/sum(k1i.*Pi.*fij(1:5,j));

    end

    A=abs(k1i-k1iX);A=A';B=abs(k2j-k2jX);

    while any(A)>0.0001|any(B)>0.0001

    n=n+1;

    k1iX=k1i; k2jX=k2j;

    for i=1:5

    k1i(i)=1/sum(k2jX.*Aj.*fij(i,1:5));

    end

    for j=1:5

    k2j(j)=1/sum(k1i.*Pi.*fij(1:5,j));

    end

    A=abs(k1i-k1iX);A=A';B=abs(k2j-k2jX);

    end

    for i=1:5

    for j=1:5

    lij(i,j)=k1i(i)*k2j(j)*Pi(i)*Aj(j)*fij(i,j);

    end

    end

    lij

    k1i

    k2j

    n

    哪儿错了???

    展开全文
  • 关于DCT变换

    2014-04-09 14:55:54
    DCT矩阵的优化,作者做了新的矩阵值的估计,使DCT之后的结果更加理想。
  • 提出一种新的针对JPEG图像的通用隐写分析方法,该方法直接提取DCT系数,利用共生矩阵去挖掘出块中低频系数的相关性,最后形成120维特征并用SVM进行分类。针对4种公认的安全性较高的JPEG类嵌入方法F5、Outguess、MB...
  • 一种基于矩阵分解的DCT快速算法 一种基于矩阵分解的DCT快速算法 一种基于矩阵分解的DCT快速算法
  • 整数DCT蝶形算法

    万次阅读 2020-04-13 10:38:28
    各种尺寸的DCT矩阵 对应的变化矩阵如下: 4x4变换矩阵: 8x8变换矩阵: 16x16变换矩阵: 下面分别是32x32变换矩阵的左边16列和右边16列: 我们可以发现以上矩阵有如下特点: 以上矩阵都是左右...

    在H.265/HEVC中支持4种不同尺寸的整数DCT变换,分别是4x4、8x8、16x16、32x32。

    各种尺寸的DCT矩阵

    对应的变化矩阵如下:

    4x4变换矩阵:

    8x8变换矩阵:

    16x16变换矩阵:

    下面分别是32x32变换矩阵的左边16列和右边16列:

    我们可以发现以上矩阵有如下特点:

    • 以上矩阵都是左右对称的,但是对称方式有所不同,偶数行的标准对称,奇数行互为相反数。

    • 所有矩阵都可以通过32x32矩阵亚采样得到。如16x16矩阵可由32x32矩阵偶数行的前16个元素组成;8x8矩阵可由32x32矩阵的第0、4、8、12、16、20、24、28行的前8个元素组成;4x4矩阵可由8x8矩阵第0、2、4、6行的前4个元素组成。

    下面是32x32矩阵的前16列及其亚采样情况:

    HM中DCT矩阵的定义

    DCT变换的正变换和逆变换的矩阵定义是相同的,都是上面定义的矩阵。

    const TMatrixCoeff g_aiT4 [TRANSFORM_NUMBER_OF_DIRECTIONS][4][4]   =
    {
      DEFINE_DCT4x4_MATRIX  (   64,    83,    36),
      DEFINE_DCT4x4_MATRIX  (   64,    83,    36)
    };
    
    const TMatrixCoeff g_aiT8 [TRANSFORM_NUMBER_OF_DIRECTIONS][8][8]   =
    {
      DEFINE_DCT8x8_MATRIX  (   64,    83,    36,    89,    75,    50,    18),
      DEFINE_DCT8x8_MATRIX  (   64,    83,    36,    89,    75,    50,    18)
    };
    
    const TMatrixCoeff g_aiT16[TRANSFORM_NUMBER_OF_DIRECTIONS][16][16] =
    {
      DEFINE_DCT16x16_MATRIX(   64,    83,    36,    89,    75,    50,    18,    90,    87,    80,    70,    57,    43,    25,     9),
      DEFINE_DCT16x16_MATRIX(   64,    83,    36,    89,    75,    50,    18,    90,    87,    80,    70,    57,    43,    25,     9)
    };
    
    const TMatrixCoeff g_aiT32[TRANSFORM_NUMBER_OF_DIRECTIONS][32][32] =
    {
      DEFINE_DCT32x32_MATRIX(   64,    83,    36,    89,    75,    50,    18,    90,    87,    80,    70,    57,    43,    25,     9,    90,    90,    88,    85,    82,    78,    73,    67,    61,    54,    46,    38,    31,    22,    13,     4),
      DEFINE_DCT32x32_MATRIX(   64,    83,    36,    89,    75,    50,    18,    90,    87,    80,    70,    57,    43,    25,     9,    90,    90,    88,    85,    82,    78,    73,    67,    61,    54,    46,    38,    31,    22,    13,     4)
    };
    #define DEFINE_DCT4x4_MATRIX(a,b,c) \
    { \
      { a,  a,  a,  a}, \
      { b,  c, -c, -b}, \
      { a, -a, -a,  a}, \
      { c, -b,  b, -c}  \
    }
    
    #define DEFINE_DCT8x8_MATRIX(a,b,c,d,e,f,g) \
    { \
      { a,  a,  a,  a,  a,  a,  a,  a}, \
      { d,  e,  f,  g, -g, -f, -e, -d}, \
      { b,  c, -c, -b, -b, -c,  c,  b}, \
      { e, -g, -d, -f,  f,  d,  g, -e}, \
      { a, -a, -a,  a,  a, -a, -a,  a}, \
      { f, -d,  g,  e, -e, -g,  d, -f}, \
      { c, -b,  b, -c, -c,  b, -b,  c}, \
      { g, -f,  e, -d,  d, -e,  f, -g}  \
    }
    
    #define DEFINE_DCT16x16_MATRIX(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) \
    { \
      { a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a}, \
      { h,  i,  j,  k,  l,  m,  n,  o, -o, -n, -m, -l, -k, -j, -i, -h}, \
      { d,  e,  f,  g, -g, -f, -e, -d, -d, -e, -f, -g,  g,  f,  e,  d}, \
      { i,  l,  o, -m, -j, -h, -k, -n,  n,  k,  h,  j,  m, -o, -l, -i}, \
      { b,  c, -c, -b, -b, -c,  c,  b,  b,  c, -c, -b, -b, -c,  c,  b}, \
      { j,  o, -k, -i, -n,  l,  h,  m, -m, -h, -l,  n,  i,  k, -o, -j}, \
      { e, -g, -d, -f,  f,  d,  g, -e, -e,  g,  d,  f, -f, -d, -g,  e}, \
      { k, -m, -i,  o,  h,  n, -j, -l,  l,  j, -n, -h, -o,  i,  m, -k}, \
      { a, -a, -a,  a,  a, -a, -a,  a,  a, -a, -a,  a,  a, -a, -a,  a}, \
      { l, -j, -n,  h, -o, -i,  m,  k, -k, -m,  i,  o, -h,  n,  j, -l}, \
      { f, -d,  g,  e, -e, -g,  d, -f, -f,  d, -g, -e,  e,  g, -d,  f}, \
      { m, -h,  l,  n, -i,  k,  o, -j,  j, -o, -k,  i, -n, -l,  h, -m}, \
      { c, -b,  b, -c, -c,  b, -b,  c,  c, -b,  b, -c, -c,  b, -b,  c}, \
      { n, -k,  h, -j,  m,  o, -l,  i, -i,  l, -o, -m,  j, -h,  k, -n}, \
      { g, -f,  e, -d,  d, -e,  f, -g, -g,  f, -e,  d, -d,  e, -f,  g}, \
      { o, -n,  m, -l,  k, -j,  i, -h,  h, -i,  j, -k,  l, -m,  n, -o}  \
    }
    
    #define DEFINE_DCT32x32_MATRIX(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E) \
    { \
      { a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a,  a}, \
      { p,  q,  r,  s,  t,  u,  v,  w,  x,  y,  z,  A,  B,  C,  D,  E, -E, -D, -C, -B, -A, -z, -y, -x, -w, -v, -u, -t, -s, -r, -q, -p}, \
      { h,  i,  j,  k,  l,  m,  n,  o, -o, -n, -m, -l, -k, -j, -i, -h, -h, -i, -j, -k, -l, -m, -n, -o,  o,  n,  m,  l,  k,  j,  i,  h}, \
      { q,  t,  w,  z,  C, -E, -B, -y, -v, -s, -p, -r, -u, -x, -A, -D,  D,  A,  x,  u,  r,  p,  s,  v,  y,  B,  E, -C, -z, -w, -t, -q}, \
      { d,  e,  f,  g, -g, -f, -e, -d, -d, -e, -f, -g,  g,  f,  e,  d,  d,  e,  f,  g, -g, -f, -e, -d, -d, -e, -f, -g,  g,  f,  e,  d}, \
      { r,  w,  B, -D, -y, -t, -p, -u, -z, -E,  A,  v,  q,  s,  x,  C, -C, -x, -s, -q, -v, -A,  E,  z,  u,  p,  t,  y,  D, -B, -w, -r}, \
      { i,  l,  o, -m, -j, -h, -k, -n,  n,  k,  h,  j,  m, -o, -l, -i, -i, -l, -o,  m,  j,  h,  k,  n, -n, -k, -h, -j, -m,  o,  l,  i}, \
      { s,  z, -D, -w, -p, -v, -C,  A,  t,  r,  y, -E, -x, -q, -u, -B,  B,  u,  q,  x,  E, -y, -r, -t, -A,  C,  v,  p,  w,  D, -z, -s}, \
      { b,  c, -c, -b, -b, -c,  c,  b,  b,  c, -c, -b, -b, -c,  c,  b,  b,  c, -c, -b, -b, -c,  c,  b,  b,  c, -c, -b, -b, -c,  c,  b}, \
      { t,  C, -y, -p, -x,  D,  u,  s,  B, -z, -q, -w,  E,  v,  r,  A, -A, -r, -v, -E,  w,  q,  z, -B, -s, -u, -D,  x,  p,  y, -C, -t}, \
      { j,  o, -k, -i, -n,  l,  h,  m, -m, -h, -l,  n,  i,  k, -o, -j, -j, -o,  k,  i,  n, -l, -h, -m,  m,  h,  l, -n, -i, -k,  o,  j}, \
      { u, -E, -t, -v,  D,  s,  w, -C, -r, -x,  B,  q,  y, -A, -p, -z,  z,  p,  A, -y, -q, -B,  x,  r,  C, -w, -s, -D,  v,  t,  E, -u}, \
      { e, -g, -d, -f,  f,  d,  g, -e, -e,  g,  d,  f, -f, -d, -g,  e,  e, -g, -d, -f,  f,  d,  g, -e, -e,  g,  d,  f, -f, -d, -g,  e}, \
      { v, -B, -p, -C,  u,  w, -A, -q, -D,  t,  x, -z, -r, -E,  s,  y, -y, -s,  E,  r,  z, -x, -t,  D,  q,  A, -w, -u,  C,  p,  B, -v}, \
      { k, -m, -i,  o,  h,  n, -j, -l,  l,  j, -n, -h, -o,  i,  m, -k, -k,  m,  i, -o, -h, -n,  j,  l, -l, -j,  n,  h,  o, -i, -m,  k}, \
      { w, -y, -u,  A,  s, -C, -q,  E,  p,  D, -r, -B,  t,  z, -v, -x,  x,  v, -z, -t,  B,  r, -D, -p, -E,  q,  C, -s, -A,  u,  y, -w}, \
      { a, -a, -a,  a,  a, -a, -a,  a,  a, -a, -a,  a,  a, -a, -a,  a,  a, -a, -a,  a,  a, -a, -a,  a,  a, -a, -a,  a,  a, -a, -a,  a}, \
      { x, -v, -z,  t,  B, -r, -D,  p, -E, -q,  C,  s, -A, -u,  y,  w, -w, -y,  u,  A, -s, -C,  q,  E, -p,  D,  r, -B, -t,  z,  v, -x}, \
      { l, -j, -n,  h, -o, -i,  m,  k, -k, -m,  i,  o, -h,  n,  j, -l, -l,  j,  n, -h,  o,  i, -m, -k,  k,  m, -i, -o,  h, -n, -j,  l}, \
      { y, -s, -E,  r, -z, -x,  t,  D, -q,  A,  w, -u, -C,  p, -B, -v,  v,  B, -p,  C,  u, -w, -A,  q, -D, -t,  x,  z, -r,  E,  s, -y}, \
      { f, -d,  g,  e, -e, -g,  d, -f, -f,  d, -g, -e,  e,  g, -d,  f,  f, -d,  g,  e, -e, -g,  d, -f, -f,  d, -g, -e,  e,  g, -d,  f}, \
      { z, -p,  A,  y, -q,  B,  x, -r,  C,  w, -s,  D,  v, -t,  E,  u, -u, -E,  t, -v, -D,  s, -w, -C,  r, -x, -B,  q, -y, -A,  p, -z}, \
      { m, -h,  l,  n, -i,  k,  o, -j,  j, -o, -k,  i, -n, -l,  h, -m, -m,  h, -l, -n,  i, -k, -o,  j, -j,  o,  k, -i,  n,  l, -h,  m}, \
      { A, -r,  v, -E, -w,  q, -z, -B,  s, -u,  D,  x, -p,  y,  C, -t,  t, -C, -y,  p, -x, -D,  u, -s,  B,  z, -q,  w,  E, -v,  r, -A}, \
      { c, -b,  b, -c, -c,  b, -b,  c,  c, -b,  b, -c, -c,  b, -b,  c,  c, -b,  b, -c, -c,  b, -b,  c,  c, -b,  b, -c, -c,  b, -b,  c}, \
      { B, -u,  q, -x,  E,  y, -r,  t, -A, -C,  v, -p,  w, -D, -z,  s, -s,  z,  D, -w,  p, -v,  C,  A, -t,  r, -y, -E,  x, -q,  u, -B}, \
      { n, -k,  h, -j,  m,  o, -l,  i, -i,  l, -o, -m,  j, -h,  k, -n, -n,  k, -h,  j, -m, -o,  l, -i,  i, -l,  o,  m, -j,  h, -k,  n}, \
      { C, -x,  s, -q,  v, -A, -E,  z, -u,  p, -t,  y, -D, -B,  w, -r,  r, -w,  B,  D, -y,  t, -p,  u, -z,  E,  A, -v,  q, -s,  x, -C}, \
      { g, -f,  e, -d,  d, -e,  f, -g, -g,  f, -e,  d, -d,  e, -f,  g,  g, -f,  e, -d,  d, -e,  f, -g, -g,  f, -e,  d, -d,  e, -f,  g}, \
      { D, -A,  x, -u,  r, -p,  s, -v,  y, -B,  E,  C, -z,  w, -t,  q, -q,  t, -w,  z, -C, -E,  B, -y,  v, -s,  p, -r,  u, -x,  A, -D}, \
      { o, -n,  m, -l,  k, -j,  i, -h,  h, -i,  j, -k,  l, -m,  n, -o, -o,  n, -m,  l, -k,  j, -i,  h, -h,  i, -j,  k, -l,  m, -n,  o}, \
      { E, -D,  C, -B,  A, -z,  y, -x,  w, -v,  u, -t,  s, -r,  q, -p,  p, -q,  r, -s,  t, -u,  v, -w,  x, -y,  z, -A,  B, -C,  D, -E}  \
    }

    DCT蝶形算法

    由于上面的DCT矩阵有很强的规律性,所有可以使用蝶形算法加快计算速度。下面以4x4的矩阵为例讲解蝶形算法。

    进行4x4DCT变换的计算过程如下:

    其中要进行4x4DCT矩阵和待变换矩阵X相乘的运算,由于4x4DCT矩阵是固定的,且有很强的规律性所以该矩阵相乘运算可以设计快速算法完成。

    可以看到上面矩阵运算过程中有多处进行了重复计算,可以在矩阵相乘前先计算出这些重复值从而避免多次计算,这就是蝶形算法。对于8x8、16x16和32x32矩阵蝶形算法类似。

    下面是HM中4x4DCT矩阵的蝶形算法:

    Void partialButterfly4(TCoeff *src, TCoeff *dst, Int shift, Int line)
    {
      Int j;
      TCoeff E[2],O[2];
      TCoeff add = (shift > 0) ? (1<<(shift-1)) : 0;
    
      for (j=0; j<line; j++)
      {
        /* E and O */
        E[0] = src[0] + src[3];
        O[0] = src[0] - src[3];
        E[1] = src[1] + src[2];
        O[1] = src[1] - src[2];
    
        dst[0]      = (g_aiT4[TRANSFORM_FORWARD][0][0]*E[0] + g_aiT4[TRANSFORM_FORWARD][0][1]*E[1] + add)>>shift;
        dst[2*line] = (g_aiT4[TRANSFORM_FORWARD][2][0]*E[0] + g_aiT4[TRANSFORM_FORWARD][2][1]*E[1] + add)>>shift;
        dst[line]   = (g_aiT4[TRANSFORM_FORWARD][1][0]*O[0] + g_aiT4[TRANSFORM_FORWARD][1][1]*O[1] + add)>>shift;
        dst[3*line] = (g_aiT4[TRANSFORM_FORWARD][3][0]*O[0] + g_aiT4[TRANSFORM_FORWARD][3][1]*O[1] + add)>>shift;
    
        src += 4;
        dst ++;
      }
    }

    感兴趣的请关注微信公众号Video Coding

     

    展开全文
  • 此代码与 matlab 的 dct 相同,但有一些... 4)您可以对(隐式)DCT矩阵的“行”进行采样,即对输出的行进行采样 这是对代码“idctt”的补充。 文件名末尾的额外“t”没有任何意义,只是为了将它与内置 dct 区分开来。
  • DCTS样本 图像处理(模糊检测)的DCT(离散余弦变换)计算 ... 根据图像矩阵计算DCT矩阵 计算逆DCT矩阵(用于测试) 这是Swift中图像处理的起点。 受到此处接受的答案的启发: : 有关DCT的更多信息: :
  • 4) 如果前向变换对(隐式)DCT 矩阵的“行”进行采样,则给出采样行的维度和索引将允许 idctt 返回适当的逆或伴随。 这是对代码“dctt”的补充。 文件名末尾的额外“ t”除了将其与内置dct区别开之外,没有其他...
  • c++实现矩阵直接做dct变换

    千次阅读 2018-08-06 20:14:46
    //进行dct变换 double Coun(int x) { if (x != 0) return 1.0; return 1.0 / (sqrt(2.0)); } void mydct(double (*matrix)[8], int M, int N) { double matrix1[4][8]; int p, q; int m, n; double ap, aq; ...
  • 给出一种新的基于拒阵分解的离散余弦变换(DCT)快速算法该算法运算速度比Wen-Hsiung Chen等人的算法快,其乘法次数是目前最少的,最后给出了N=8的信号流图,便于软件和硬件实现。
  • matlab灰色矩阵相乘代码离散余弦变换(DCT) 我已经使用Verilog和Matlab在OBC上实现了DCT 在Matlab中将RGB彩色图像转换为灰色图像 将图像数据存储在Xillinx的BRAM模块中 由于我们的DCT系数矩阵为8x8,因此将图像分割...
  • 5.2 矩阵变换 cv::dct(InputArraysrc,OutputArraydst, int flags=0) 执行一维或二维数组的正向或反向离散余弦变换。 该函数通过查看输入数组的标志和大小来选择操作模式: (1)如果(flags & DCT_INVERSE) ==...
  • DCT变换(离散余弦变换)的矩阵乘法实现(64×64维)
  • 由于DCT的数学原理不好描述,直接放代码了: #include #include #include #include using namespace std; using namespace cv; const double pi = 3.141592; void initDctMat(Mat &A) //计算8x8块的离散余弦变换...
  • 使用矩阵掩码进行压缩的 DCT 图像处理
  • 首先,让我们来看一下DCT的公式: F(u)={1N∑x=0N−1f(x),n≠m2N∑x=0N−1f(x)cos⁡(2x+1)uπ2N,n=m F(u)= \begin{cases} \frac{1}{\sqrt{N}}\sum_{x=0}^{N-1}f(x), & n\ne m \\ \frac{2}{\sqrt{N}}\sum_{x=0}^...
  • dct变换matlab

    2018-04-21 21:16:28
    matlab中DCT变换 使用矩阵进行算法的研究。弄这个是为了赚积分,我觉得VIP太贵了
  • DCT变换

    2014-05-07 22:55:07
    对于大尺寸的二维数值矩阵,倘若采用普通的DCT变换来进行,其所花费的时间将是让人难以忍受甚至无法达到实用。而要克服这一难点,DCT变换的快速算法无非是非常吸引人的。  就目前而言,DCT变换的快速算法无非有...
  • 离散余弦变换DCT

    千次阅读 2016-11-16 11:32:32
    DFT:离散傅里叶变换 实变换的DFT有共轭对称性,有一半的数据冗余。 因此,提出DCTDCT:在频域是实信号,...因此我们获得DCT和TDCT系数矩阵,就可以得到最终的DCT变换矩阵。result = DCT(h_h) * Image(h_w) * TDCT
  • chen fast dct

    2013-11-11 18:32:40
    实现chen 的快速DCT算法,准确,有效,对比了CHEN 的快速DCT算法和原始DCT算法的时间。实现了4X4,8X8,16X16 和32x32的矩阵

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 316
精华内容 126
关键字:

dct矩阵