0

特定の画像が与えられたので、画像の境界線を作成する必要があります。黒と白の境界線の幅をそれぞれ 25 ピクセルにすることにしました。私のコードは以下の通りです:

%% Reading the Image in
imdata = imread('image1.png');

%%Creating a new matrix for image3
e_imdata = zeros(300,356);

% First Rectangle of white 

for l = 25:331
    for m = 25:50
        e_imdata(m,l) = 255;
    end
end

%% Second Rectangle of White 

for l = 25:331
    for m = 250:275
        e_imdata(m,l) = 255;
    end
end


%% Third Rectangle of White

for l = 25:50
    for m = 50:250
        e_imdata(m,l) = 255;
    end
end

%%  Fourth Rectangle of White

for l = 306:331
    for m = 50:250
        e_imdata(m,l) = 255;
    end
end

%% Copying the Actual Image in 

for l = 51:305
    for m = 51:199
        e_imdata(m,l) = imdata(m-50,l-50);
    end
end

%% Final imsow
    imshow(e_imdata);

白い四角形の境界線を1つずつ追加しようとしています。これは確かに成功していますが、私の最終的なイメージは思い通りにはなりません。

元の画像:

ここに画像の説明を入力

このイメージを作成する必要があります:

ここに画像の説明を入力

そして、私はこのイメージを得ているようです:

ここに画像の説明を入力

すべてのヘルプと提案は大歓迎です!

4

1 に答える 1

1

問題は、imshow() がグレースケール カラーを適切な範囲にスケーリングしていないことです。代わりに、グレースケールの最小値と最大値を指定します。

imshow(e_imdata, [0 255]);

または、データを uint8 に変換します

imshow(uint8(e_imdata));

コードのもう 1 つの問題は、画像を完全にコピーしていないことです。これが、まだ黒い背景の一部が表示されている理由です。最後のループでは、次のインデックスを使用する必要があります。

%% Copying the Actual Image in 
for l = 51:306
    for m = 51:250
        e_imdata(m,l) = (imdata(m-50,l-50));
    end
end
于 2015-11-27T21:55:07.270 に答える