1

matlab で多数の画像を結合しようとしています。合成枚数は4枚までです。レイヤーの概念に基づいて(Photoshopのように)結合しないように結合したいと思います。これは、結果の画像のサイズが、結合された各画像のサイズと同じになることを意味します。そのタスクを適切に実行するmatlab関数はありますか?

4

2 に答える 2

0

これを試して:

img1 = imread...
img2 = imread...
img3 = imread...
img4 = imread...

combined_img(:,1) = img1;
combined_img(:,2) = img2;
combined_img(:,3) = img3;
combined_img(:,4) = img4;

これで、combined_img の 3 番目のインデックスでアクセスできる 4 層の画像ができました。次のコマンドは、最初の画像を表示します。

imshow(combined_img(:,1));
于 2012-08-27T06:38:54.273 に答える
0

これはあなたが説明するようなことをします:

function imgLayers


    % initialize figure
    figure(1), clf, hold on

    % just some random image (included with Matlab) to server
    % as the background
    img{1,1} = imresize(imread('westconcordaerial.png'), 4);    
    img{1,2} = [0 0];

    % rotate the image and discolor it to create another image
    img{2,1} = uint8(imresize(imrotate(img{1}, +12), 0.3)/2.5);
    img{2,2} = [150 20];

    % and another image
    img{3,1} = uint8(imresize(imrotate(img{1}, -15), 0.5)*2.5);
    img{3,2} = [450 80];

    % show the stacked image
    imshow(stack_image(img));

    %% create new image, based on several layers

    function newImg = stack_image(imgs)

        % every image contained at a cell index (ii) is placed 
        % on top of all the previous ones (0:ii-1)

        rows = cellfun(@(x)size(x,1),imgs(:,1));
        cols = cellfun(@(x)size(x,2),imgs(:,1));

        % initialize new image        
        newImg = zeros(max(rows(:)), max(cols(:)), 3, 'uint8');

        % traverse the stack
        for ii = 1:size(imgs,1)

            layer  = imgs{ii,1};
            offset = imgs{ii,2};

            newImg( offset(1)+(1:rows(ii)), offset(2)+(1:cols(ii)), :) = layer;

        end   
    end   

end

ただし、十分な境界チェックなどがないことに注意してください。そのため、自分で少し開発する必要があります。しかし、それはあなたが始めるのに十分なはずです:)

于 2012-08-27T13:17:47.483 に答える