image - 图像的离散余弦变换 (DCT)

标签 image matlab dct

我在 Matlab 中使用一个函数来计算图像的 DCT(离散余弦变换)。我不知道我的代码有什么问题,但我得到了一个相同编号的输出图像。我想将这个公式用于我的 DCT。

请有任何想法。

    function image_comp = dctII(image, b)
    [h w] = size(image);
    image = double(image) - 128;
    block = zeros(b,b);

 image_t=zeros(size(image));
 for k=1:b:h
     for l=1:b:w
        image_t(k:k+b-1,l:l+b-1)= image(k:k+b-1,l:l+b-1);
        for u=1:b
            for v=1:b
                if u == 0
                    Cu = 1/sqrt(2);
                else
                    Cu = 1;
                end
                if v == 0
                    Cv = 1/sqrt(2);
                else
                    Cv = 1;
                end
                Res_sum=0;
                for x=1:b;
                    for y=1:b
                        Res_sum = Res_sum + ((image_t(x,y))*cos(((2*x)+1)*u*pi/(2*b))*cos(((2*y)+1)*v*pi/(2*b)));  
                    end
                end
                dct= (1/4)*Cu*Cv*Res_sum;
                block(u,v) = dct;

            end
        end
        image_comp(k:k+b-1,l:l+b-1)=block(u,v);
     end
 end
end

最佳答案

在 x 和 y 的内部循环中,您没有从 image_t 中的正确位置读取。您已将本地 block 复制到以 k,l 作为左上角的位置用于处理,但在内部循环中,您始终从 1,1 开始的同一 block 读取作为 image_t 中的左上角。

关于image - 图像的离散余弦变换 (DCT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19073654/

相关文章:

jquery - 将图像(横向和纵向)适合方形缩略图

java - Liferay - 调整文档和媒体中的图像大小和转换图像类型 DLFileEntry

matlab - 直线和曲线之间的区域(无功能)

Matlab求第一个负数的序列

android - 如何在android中连接/组合两个位图并使它们成为一张图像

PHP 表单仅将图像发送到 MYSQL 数据库,没有其他值

matlab - 防止 Matlab 舍入输出?

c - DCT变换问题: results are incorrect

visual-c++ - JPEG 提取 DCT 表

c# - C# 中 libJPEG 中的 height_in_blocks