0

大きな tif 画像のタイルに対して画像分析を実行しようとしています。これらの各タイルに必要な処理は既に完了しています。このステップでは、これらの TIFS から 1 つのモザイクを作成する必要があります。この理由で「cat」機能を使用できる場所を読みました。私はプログラミングのプロではないので、簡単だと思い、適用しようとしました。私が持っているタイルは約 154 の tif で、そのうちの 4 つで猫を試してみましたが、動作するので、すべてのファイルに展開する必要があります。私の問題は、すべてのティフに適用することです。それらの4つのコードは次のとおりです。

img1 = imread ('E:...\'a1.tif','tif');
img2 = imread ('E:...\'a2.tif','tif');
img3 = imread ('E:...\'a3.tif','tif');
img4 = imread ('E:...\'a4.tif','tif');

image1 = cat(2,img1,img3);

image2 = cat(2,img2,img4);

image3 = cat(1,image2,image1);
imshow(image3)

コードでわかるように、2 つずつ水平方向にステッチする必要があり、結果として垂直方向にステッチして最終的な画像が得られます。M の問題は、これらの量の画像を使用して、どの画像を最初に水平方向にステッチし、次に結果の画像を垂直方向にステッチするかを定義する方法です。皆さんが私を助けてくれたら、本当に感謝しています。他のアプローチは大歓迎です。

4

1 に答える 1

0

タイルが同じサイズの場合、単純な行列であるかのように操作することでそれらを連結できます。

% dots-and-linebreak used for prettier formatting
concatenated_image = [ img1, img3; ...
                       img2, img4 ];

すべてのタイル;が水平方向に 1 行に連結され、行が垂直方向に連結されて最終的な画像が形成されます。

この原則を適用すると、次のようにして、プリロードされたイメージをいくつでも結合できます。

NUMBER_OF_IMAGES = 152;   % divisible by 4
IMAGES_PER_LINE = 4;

concatenated_image = [];
for ii = 0 : (NUMBER_OF_IMAGES/IMAGES_PER_LINE)-1
    one_row = [];
    for jj = 1 : IMAGES_PER_LINE
        % concatenate next image in this line
        one_row = [ one_row eval(['img' num2str(4*ii+jj)]) ];
    end

    % add constructed row to the existing image
    concatenated_image = [ concatenated_image; one_row ];
end

のような名前の変数を使用する代わりに、Matlabの cell 配列imgNを使用することをお勧めします。次に、すべての画像を次のようにロードできます。

imgs = {};
for ii = 1:154
    imgs{ii} = imread (['E:...\a' num2str(ii) '.tif'],'tif');
end

次に、上記の連結コードを次のように変更する必要があります。

...
one_row = [ one_row imgs{4*ii+jj} ];
...
于 2013-06-03T11:14:46.427 に答える