関数を使用せずに画像をグレースケールに変換したいです。
45 次查看(过去 30 天)
显示 更早的评论
画像とサイズを読み込んでからfor文で各画素にグレースケール変換をしたいです
0 个评论
采纳的回答
Atsushi Ueno
2022-7-29
> rgb2gray は、R 成分、G 成分、B 成分の重み付き和を計算することによって、RGB 値をグレースケール値に変換します。
>
I = imread('onion.png');
[row,col,wdh] = size(I);
for r = 1:row
for c = 1:col
G(r,c) = I(r,c,1) * 0.2989 + I(r,c,2) * 0.5870 + I(r,c,3) * 0.1140;
end
end
imshow(G);
0 个评论
更多回答(2 个)
Hernia Baby
2022-7-29
3番目がR,G,Bに対応しているので、for文で抜き出します
I = imread('ngc6543a.jpg');
for ii = 1:3
A{ii} = I(:,:,ii);
end
montage([A{1},A{2},A{3}])
1 个评论
Hernia Baby
2022-7-30
ちなみにRGBのみを分離する関数もあります
imsplit関数です
I = imread('ngc6543a.jpg');
[R,G,B] = imsplit(I);
ここから指定の色以外を黒で設定して表示してみましょう
allBlack = zeros(size(I,1,2),class(I));
justR = cat(3,R,allBlack,allBlack);
justG = cat(3,allBlack,G,allBlack);
justB = cat(3,allBlack,allBlack,B);
figure
montage({justR,justG,justB},'Size',[1 3], ...
"BackgroundColor",'w',"BorderSize",10);
title('Color Representation of the Red, Green, and Blue Color Channels');
Atsushi Ueno
2022-7-29
> 関数を使用せずに画像をグレースケールに変換したいです
> 画像とサイズを読み込んでからfor文で各画素にグレースケール変換をしたいです
我慢出来ない!行列操作や型変換は関数であっても関数の内に入らない!
I = imread('onion.png');
[row,col,wdh] = size(I);
G1 = reshape(double(I(:)), [], wdh) * [0.2989; 0.5870; 0.1140];
G2 = uint8(reshape(G1, [row,col]));
imshow(G2);
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 イメージ算術 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!