Как разделить изображение на 64 блока в Matlab - PullRequest
2 голосов
/ 06 марта 2011

Я хочу вычислить дескриптор цветовой разметки (CLD) для каждого изображения ... этот алгоритм включает четыре этапа.На первом этапе я должен разделить каждое изображение на 64 блока i (8 × 8) n, чтобы вычислить один репрезентативный цвет из каждого блока.тинг изображение.Я хочу получить изображение с блоком (8 × 8), чтобы завершить алгоритм, применив преобразование DCT, а затем зигзагообразное сканирование

Ответы [ 2 ]

4 голосов
/ 06 марта 2011

Один из способов разделить ваше изображение на блоки и затем выполнить некоторую обработку на нем - это использовать встроенную функцию 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-файл, или как анонимную функцию. Вывод будет объединен в массив 8х8х, где х - это размер вывода вашей функции. myFunction следует ожидать один входной аргумент, blockStruct, который представляет собой структуру с полями data, содержащей значения пикселей блока, а также с полями border, blockSize, imageSize и location.

2 голосов
/ 06 марта 2011

Вот некоторые фрагменты кода, которые я написал для точно такой же задачи (блоки 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. Обычно в этом приложении вы используете некоторые перекрытия.

...