issue with rgb2ind

1 回表示 (過去 30 日間)
Andrew Luce
Andrew Luce 2022 年 9 月 22 日
編集済み: DGM 2023 年 5 月 21 日
Hello,
I just leared that back in the day that you could get a camera for your game boy. I was just interested into replicating the style of image that they made. I simply just used the stock pepper image, scaled the image to a multiple of 128x112 and tried to use rgb2ind to convert the image to "greyscale" or a "greenscale". I use indicies that I found but I keep getting a black image. What am I doing wrong?
for reference, this article shows how to create the effect with gimp
%% rescale image
Scale_Multiplier = 4;
rescale_size = [112,128].* Scale_Multiplier;
RGB2 = imresize(RGB,[rescale_size(1) rescale_size(2)]);
%% Greyscale or Greenscale
Gray_or_Green = 1;
%% Color image
if (Gray_or_Green ==0)
Color_Map = [0,0,0;128,128,128;192,192,192;255,255,255]; % Grey
Color_Map = Color_Map/255;
elseif (Gray_or_Green ==1)
Color_Map = [51,57,35;110,121,75;191,201,150;241,246,223]; % Green
Color_Map = Color_Map/255;
end
X = rgb2ind(RGB2,Color_Map);
imshow(X)

回答 (2 件)

Walter Roberson
Walter Roberson 2022 年 9 月 22 日
RGB = imread('flamingos.jpg');
%% rescale image
Scale_Multiplier = 4;
rescale_size = [112,128].* Scale_Multiplier;
RGB2 = imresize(RGB,[rescale_size(1) rescale_size(2)]);
%% Greyscale or Greenscale
Gray_or_Green = 1;
%% Color image
if (Gray_or_Green ==0)
Color_Map = [0,0,0;128,128,128;192,192,192;255,255,255]; % Grey
Color_Map = Color_Map/255;
elseif (Gray_or_Green ==1)
Color_Map = [51,57,35;110,121,75;191,201,150;241,246,223]; % Green
Color_Map = Color_Map/255;
end
X = rgb2ind(RGB2,Color_Map);
RGBX = ind2rgb(X, Color_Map);
imshow(RGBX)
  2 件のコメント
Andrew Luce
Andrew Luce 2022 年 9 月 22 日
Thank you for the help. The only thing I'm wondering is if that it can change the dithering style to more like this?
Walter Roberson
Walter Roberson 2022 年 9 月 22 日
Possibly dither instead of the rgb2ind() call ?

サインインしてコメントする。


DGM
DGM 2023 年 5 月 21 日
編集済み: DGM 2023 年 5 月 21 日
When I was adding gray2pcolor()/uniquant() to MIMT, I thought about this question. I took the time to add dithering modes to both to make this sort of thing possible. I decided to go the extra mile and just make a tool to do this one thing specifically.
MIMT now has gbcam().
inpictrgb = imread('hallway.jpg');
inpict = mono(inpictrgb,'y'); % convert to luma
% it usually helps to play with image brightness/contrast
inpict = imlnc(inpict,'g',1.2,'k',1.2);
scale = 2; % output scaling factor
% tan-tone like a GB pocket
A = gbcam(inpict,'newschool',scale);
% olive-tone like an original GB
B = gbcam(inpict,'oldschool',scale);
% slightly bright with muted extrema (gamma~0.8)
C = gbcam(inpict,'gray',scale);
% the common overly-bright gray map (gamma~0.68)
D = gbcam(inpict,'brigray',scale);
% a strictly linear gray map (gamma=1)
E = gbcam(inpict,'unigray',scale);
% concatenate for easier handling
outpict1 = [A B];
outpict2 = [C D E];
If you don't like these maps, you can specify your own as a 4x3 unit-scale color table.
% hmm i like that olive map, but i want the midtones brighter
CT = [0 59 61; 24 109 66; 47 160 72; 71 210 77]/255; % the given map
CT = ctshift(CT,0.3); % shift the map distribution
% use your new custom map
A = gbcam(inpict,CT,scale);
Images are automatically centered, scaled, and cropped to fit the output frame. If you want your image located differently, prepare it accordingly prior to feeding it to gbcam().
The functions gbcam(), mono(), imlnc(), and ctshift() are all from MIMT.

カテゴリ

Help Center および File ExchangeModify Image Colors についてさらに検索

タグ

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by