2

我想为每个图像计算颜色布局描述符(CLD)。这个算法包括四个阶段。在第一阶段,我必须将每个图像划分为 64 个块 i(8×8)n,以便从每个块中计算出一个代表颜色。我尝试使用(For 循环)将图像划分为 64 个块,但我得到 64廷形象。我想用(8×8)块获得图像,以便通过应用 DCT 变换然后之字形扫描来完成算法

4

2 回答 2

5

将图像划分为块然后对其运行一些处理的一种方法是使用内置函数BLOCKPROCblkproc在旧版本的 Matlab 中调用)。

%# find block length in order to get 64 blocks
imageSize = size(img);
blockLen = round(imageSize(1:2)/8);

%# apply a function to each block
out = blocproc(img,blockLen,@myFunction)

myFunction是您要应用于每个块的功能。您可以将其定义为代码的子函数、单独的 m 文件或匿名函数。输出将连接到一个 8x×8x 数组中,其中 x 是函数输出的大小。myFunction应该期望单个输入参数 ,blockStruct它是一个结构体,其字段data包含块的像素值,以及字段borderblockSizeimageSizelocation

于 2011-03-06T18:59:00.197 回答
2

这是我前一段时间为完全相同的问题(8x8 块,DCT 系数等)编写的一些代码......

img=imread('filename')
[img_x,img_y]=size(img);

block_size=8;
slide_len=1;

for ix=block_size/2:slide_len:img_x-block_size/2
    for jy=block_size/2:slide_len:img_y-block_size/2
        current_block=img((ix-block_size/2+1):(ix+block_size/2),(jy-block_size/2+1):(jy+block_size/2));
        dct_coeff=reshape(dct2(current_block),1,block_size^2);

        <insert any other code you want to run here>
    end
end

slide_len设置一个块和下一个块之间的偏移量。在这种情况下,它每次偏移一个像素。但是,如果您想要不重叠的块,则应将其设置为 8。通常在此应用程序中,您会使用一些重叠。

于 2011-03-06T05:41:22.857 回答