我想为每个图像计算颜色布局描述符(CLD)。这个算法包括四个阶段。在第一阶段,我必须将每个图像划分为 64 个块 i(8×8)n,以便从每个块中计算出一个代表颜色。我尝试使用(For 循环)将图像划分为 64 个块,但我得到 64廷形象。我想用(8×8)块获得图像,以便通过应用 DCT 变换然后之字形扫描来完成算法
问问题
8730 次
2 回答
5
将图像划分为块然后对其运行一些处理的一种方法是使用内置函数BLOCKPROC(blkproc
在旧版本的 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
包含块的像素值,以及字段border
、blockSize
、imageSize
和location
。
于 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 回答