如何在matlab中将图像分割为64块

时间:2011-03-06 01:09:39

标签: image matlab data-partitioning

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

2 个答案:

答案 0 :(得分:4)

将图像分割成块然后对其进行一些处理的一种方法是使用内置函数BLOCKPROC(在旧版本的Matlab中称为blkproc)。

%# 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的字段的结构,包含字段的像素值,以及字段border,{{1 }},blockSizeimageSize

答案 1 :(得分: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.通常在这个应用程序中,你使用一些重叠。