0

現在、以下のコードを使用して、画像を cellSizeX ピクセル x cellSizeY ピクセルのグリッドに分割しています。

    grid = zeros(cellSizeX, cellSizeY, ColorCount, cellTotalX, cellTotalY);
    for i = 1:cellSizeX:(HorRowCount)        
        for j = 1:cellSizeY:(VertColumnCount)
                try
                    grid(:,:,:,icount, jcount) = img(i:i+cellSizeX-1, j:j+cellSizeY-1, :);
                catch

                end

            jcount = jcount + 1;

        end
        icount = icount + 1;
        jcount = 1;
    end

このコードは問題なく満足に動作しますが、私を悩ませていることがあります。

  1. grid(:,:,:,icount,jcount) と grid(icount,jcount,:,:,:) などの切り替えインデックス位置を比較して、tic と toc でいくつかのテストを行うと、grid(:,:,: ,icount,jcount) が最速です。しかし、ここで何か改善できますか?

  2. このコードは、要求された cellSizeX と cellSizeY が画像 img に比例する場合にのみ機能します。そのため、サイズが 40 x 40 の画像で 9 x 9 の cellSizeX と cellSizeY を要求すると、Matlab が行列の次元を超えていると不平を言うことになります。これに関する提案はありますか?それらのセルの空白領域を単純に埋めたくありません。これらのセルは、Vlfeat SIFT でさらに使用されます。

4

1 に答える 1

1
  1. 画像を各セルのサイズが CellSizeX x CellSizeY x ColorCount の cellarray に変換し、これらすべてのセルを 1 つの配列グリッドにスタックするのはどうですか?

    ca = mat2cell( img, cellSizeY * ones(1, cellTotalY), ...
    cellSizeX * ones(1, cellTotalX), ...
    ColorCount );
    grid = reshape( cat( 4, ca{:} ),...
    cellSizeX, cellSizeY, ColorCount, cellTotalX, cellTotalY);

  2. 画像処理コミュニティでは、境界での画像の値に応じてゼロ以外の値で画像をパディングすることに慣れています。詳細については、関数padarrayを参照してください。パディングされたサイズが CellSizeX と CellSizeY に比例するように入力画像をパディングできます (パディングは両方の軸で同じである必要はありません)。

于 2012-11-25T18:49:27.573 に答える