2017-09-05 71 views
1

我想重疊兩個圖像,一個灰度和一個RGB圖像。我想將RGB圖像強加在灰度圖像的頂部,但只適用於大於特定值的像素。我嘗試在MATLAB中使用double函數,但是這似乎改變了配色方案,我無法恢復原來的RGB顏色。我應該怎麼做才能保留原始的RGB圖像,而不是將其映射到MATLAB顏色映射之一?下面是我嘗試在疊加:重疊灰度和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在上限停在深紅色。當您將這些值取平均值,然後使用jet色彩圖生成ind2rgb的新RGB圖像時,您將創建一個內在不同的圖像。你可能想直接在生成您的覆蓋使用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 imageBrightfielduint8類型。

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秒形象,我運行上面的代碼時,得到如下
相關問題