2017-09-05 13 views
1

2つの画像、1つのグレースケールと1つのRGB画像をオーバーラップしたいと思います。私はグレースケール画像の上にRGB画像を当てたいと思いますが、特定の値よりも大きいピクセルについてのみそうします。私はdouble関数をMATLABで使用しようとしましたが、これはカラースキームを変更するようで、元のRGBカラーを復元することはできません。元のRGBイメージをMATLABカラーマップの1つにマッピングするのではなく、元のRGBイメージを保持するためにはどうすればよいですか?以下は、重畳で私の試みです:グレースケール画像とRGB画像のオーバーラップ

pixelvalues = double(imread('hello.png')); 
PixelInt = mean(pixelvalues,3); 
I1 = ind2rgb(Brightfield(:,:,1), gray(256)); %Brightfield 
I2 = ind2rgb(PixelInt, jet(256)); %RGB Image 
imshow(I2,[]) 
[r,c,d] = size(I2); 
I1 = I1(1:r,1:c,1:d); 
% Replacing those pixels below threshold with Brightfield Image 
threshold = 70; 

I2R = I2(:,:,1); I2G = I2(:,:,2); I2B = I2(:,:,3); 
I1R = I1(:,:,1); I1G = I1(:,:,2); I1B = I1(:,:,3); 

I2R(PixelInt<threshold) = I1R(PixelInt<threshold); 
I2G(PixelInt<threshold) = I1G(PixelInt<threshold); 
I2B(PixelInt<threshold) = I1B(PixelInt<threshold); 
I2(:,:,1) = I2R; I2(:,:,2) = I2G; I2(:,:,3) = I2B; 

h = figure; 
imshow(I2,[]) 

オリジナルRGBイメージ:

Original RGB Image

は明:

enter image description here

オーバーレイ

Overlay

答えて

2

はあなたの最初の画像に表示何pixelvaluesのコンテンツですか?その場合、そのイメージはjetカラーマップを使用しません。赤の値を上回るピンクと白の値を持ちますが、jetは上限の濃い赤で停止します。これらの値の平均値をとり、ind2rgbの新しいRGB画像をjetカラーマップを使用して生成すると、本質的に異なる画像が作成されます。あなたは、おそらくそうのように、あなたのオーバーレイを生成する際に直接pixelvaluesを使用する:あなたが起動イメージを作成する/ロードするときに、いくつかの型変換を行う必要があり

% Load/create your starting images: 
pixelvalues = imread('hello.png');   % Color overlay 
I1 = repmat(Brightfield(:, :, 1), [1 1 3]); % Grayscale underlay 
[r, c, d] = size(pixelvalues); 
I1 = I1(1:r, 1:c, 1:d); 

% Create image mask: 
PixelInt = mean(double(pixelvalues), 3); 
threshold = 70; 
mask = repmat((PixelInt > threshold), [1 1 3]); 

% Combine images: 
I1(mask) = pixelvalues(mask); 
imshow(I1); 

注意。私は'hello.png'uint8 RGB imageであり、Brightfielduint8であると仮定しています。

enter image description here

0

マスクを作成し、画像を結合するためにそれを使用します:

onionOrig = imread('onion.png'); onionGray = rgb2gray(onionOrig); onionMask = ~(onionOrig(:,:,1)<100 & onionOrig(:,:,2)<100 & onionOrig(:,:,3)<100); onionMasked(:,:,1) = double(onionOrig(:,:,1)) .* onionMask + double(onionGray) .* ~onionMask; onionMasked(:,:,2) = double(onionOrig(:,:,2)) .* onionMask + double(onionGray) .* ~onionMask; onionMasked(:,:,3) = double(onionOrig(:,:,3)) .* onionMask + double(onionGray) .* ~onionMask; onionFinal = uint8(onionMasked); imshow(onionFinal)
を私は pixelvaluesとしてあなたの最初の画像をロードし、 I1としての第二の画像ならば、上記のコードを実行するときに、私は以下のものを得ます
関連する問題