2

各画像のカラー レイアウト記述子 (CLD) を計算したい..このアルゴリズムには 4 つの段階が含まれます。最初の段階では、各ブロックから単一の代表色を計算するために、各画像を64ブロックi(8×8)nに分割する必要があります..(Forループ)を使用して画像を64ブロックに分割しようとしましたが、64を取得しますティン画像。DCT変換を適用してからジグザグスキャンしてアルゴリズムを完成させるために、(8×8)ブロックで画像を取得したい

4

2 に答える 2

5

画像をブロックに分割して処理を実行する 1 つの方法は、組み込み関数BLOCKPROC ( blkprocMatlab の古いバージョンで呼び出されます) を使用することです。

%# 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 x 8x の配列に連結されます。x は関数の出力のサイズです。は、フィールド、、、およびだけでなく、ブロックのピクセル値を含むフィールドを持つ構造体であるmyFunction単一の入力引数 を想定する必要があります。blockStructdataborderblockSizeimageSizelocation

于 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あるブロックと次のブロックの間のオフセットを設定します。この場合、毎回 1 ピクセルずつオフセットされます。ただし、オーバーラップしないブロックが必要な場合は、8 に設定する必要があります。通常、このアプリケーションでは、いくつかのオーバーラップを使用します。

于 2011-03-06T05:41:22.857 に答える