Rotemが言ったように、赤と緑のチャンネルを入れ替えるだけです。スワッピングは緑の色の代わりに画像全体に影響を与えます。
緑色を最初にセグメント化して緑色を他の色に変更する必要があります。 examplesのペアは、Matlabのドキュメント自体にあります。
緑の色をセグメント化して変更しようとしましたが、下のコードが画像に反映されない可能性がありますが、まあまあ良い結果を得ることができます。赤い色に
rgbImage = imread('peppers.png');
figure, imshow(rgbImage);
title('Original Image');
redChannel = rgbImage(:, :, 1);
greenChannel = rgbImage(:, :, 2);
blueChannel = rgbImage(:, :, 3);
%% Now lets take the difference of each the channels.
% these subtracted images will be used to mask the segmented area.
% If you are curious, plot them and see how they look!!
red_subtract_grn = redChannel-greenChannel;
red_subtract_blue = redChannel-blueChannel;
grn_subtract_blue = greenChannel - blueChannel;
red_add_grn = double(redChannel)+double(greenChannel)+double(blueChannel);
%% Lets segment the green color by filtering/thresholding technique,
% we need to choose the index number according to rgbImage, one should tweak a bit to get better results. (These
% numbers worked well for 'peppers.jpg' image.I have used indexing since its
% very neat and faster, alternatively you can use find() also).
try_mask = ones(size(rgbImage(:,:,1))); %Initialize mask image.
try_mask(red_subtract_blue < 7) = 0; %remove background
try_mask = medfilt2(try_mask,[4,4]); %Filter unwanted scattered pixels.
try_mask(red_subtract_grn > 40) = 0;
try_mask(red_add_grn > 500) = 0;
try_mask(grn_subtract_blue < 20) = 0;
try_mask(blueChannel > 80) = 0;
try_mask = medfilt2(try_mask,[8,8]);
%% Lets apply mask to remove green and blue pixels such that only red color will appear on the masked region.
greenChannel(try_mask > 0) = 0;
blueChannel(try_mask > 0) = 0;
rgbImage2 = cat(3, redChannel, greenChannel, blueChannel);
figure, imshow(rgbImage2);
title('After changing green to red')
緑色:
出典
2016-10-25 14:07:35
AMS
Funnily、その写真がそのまま見えます! –