各画像のカラー レイアウト記述子 (CLD) を計算したい..このアルゴリズムには 4 つの段階が含まれます。最初の段階では、各ブロックから単一の代表色を計算するために、各画像を64ブロックi(8×8)nに分割する必要があります..(Forループ)を使用して画像を64ブロックに分割しようとしましたが、64を取得しますティン画像。DCT変換を適用してからジグザグスキャンしてアルゴリズムを完成させるために、(8×8)ブロックで画像を取得したい
質問する
8730 次
2 に答える
5
画像をブロックに分割して処理を実行する 1 つの方法は、組み込み関数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 x 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
あるブロックと次のブロックの間のオフセットを設定します。この場合、毎回 1 ピクセルずつオフセットされます。ただし、オーバーラップしないブロックが必要な場合は、8 に設定する必要があります。通常、このアプリケーションでは、いくつかのオーバーラップを使用します。
于 2011-03-06T05:41:22.857 に答える