RGB値の補正方法を教えてください

10 次查看(过去 30 天)
宗樹 岡本
宗樹 岡本 2023-10-8
评论: Atsushi Ueno 2023-10-24
RGB値の補正方法を教えていただきたいです。
I = imread("a.jpg");
imshow(I)
R = double(I(:,:,1));
G = double(I(:,:,2));
B = double(I(:,:,3));
その後、
hoseiR = 2*R
hoseiG = 3*G
hosieiB = 4*B
のようにイメージの各ピクセルごとのRGB値を上記の式を用いて色の変換を行いたいです。
その後、補正する前のRGB画像と補正したRGB画像を表示し,フォルダに保存する方法をご教授お願い致します。
よろしくお願いいたします。

采纳的回答

Atsushi Ueno
Atsushi Ueno 2023-10-8
下部に解説を書きました。
I = imread("peppers.png");
hoseiRGB = uint8(cat(3,2,3,4)).* I; % 各ピクセルごとのRGB値(色)の変換
imwrite(hoseiRGB, "hoseiRGB.jpg"); % フォルダに保存
montage({I, hoseiRGB}); % 補正前後のRGB画像を並べて表示
uint8(26)*10 % uint8型は0-255。演算結果が255を超えると飽和する。
ans = uint8 255
RGBイメージは、uint8またはuint16型です。MATLABは演算結果が飽和するので、イメージデータをdoubleに変換しなくても問題ありません。
I = imread("peppers.png");
class(I) % peppers.png を imread で読み込むと uint8 型のイメージデータになる
ans = 'uint8'
size(I) % peppers.png は X*Y*3 の RGB データ
ans = 1×3
384 512 3
説明の為、RGB各層別に異なる係数を掛ける為の変数を作成しました。
COE = uint8(cat(3,2,3,4)) % RGB別の係数項を作成
COE = 1×1×3 uint8 array
COE(:,:,1) = 2 COE(:,:,2) = 3 COE(:,:,3) = 4
hoseiRGB = COE.* I; % 各ピクセルごとのRGB値(色)の変換
  4 个评论
宗樹 岡本
宗樹 岡本 2023-10-24
続けて質問致しますが、
R = 2*R-10
G = 3*G-15
B = 4*B-20とするとき、
hoseiRGB = cat(3,2,3,4).*double(I)-cat(3,10,15,20)・・・(式1)
hoseiRGB = cat(3,2,3,4).*double(I)+cat(3,-10,-15,-20)・・・(式2)
式1と式2で出力される画像の色味が変わってしまうのですが,どちらが正しいのでしょうか?
Atsushi Ueno
Atsushi Ueno 2023-10-24
負値になる事もあるのですね。先の下記命令は正の実数しか考慮していません。正規化については、あらゆる場面を考慮した normalize 関数に譲った方が良さそうです。
I = imread("peppers.png");
hoseiRGB = cat(3,2,3,4).* double(I) - cat(3,10,15,20); % 各ピクセル色の変換
hoseiRGB = normalize(hoseiRGB); % MATLABに頼った正規化
montage({I, hoseiRGB}); % 補正前後のRGB画像を並べて表示

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 幾何学的変換とイメージ レジストレーション 的更多信息

标签

产品


版本

R2022a

Community Treasure Hunt

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

Start Hunting!