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

9 views (last 30 days)
宗樹 岡本
宗樹 岡本 on 8 Oct 2023
Commented: Atsushi Ueno on 24 Oct 2023
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画像を表示し,フォルダに保存する方法をご教授お願い致します。
よろしくお願いいたします。

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 8 Oct 2023
下部に解説を書きました。
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 Comments
宗樹 岡本
宗樹 岡本 on 24 Oct 2023
続けて質問致しますが、
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 on 24 Oct 2023
負値になる事もあるのですね。先の下記命令は正の実数しか考慮していません。正規化については、あらゆる場面を考慮した 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画像を並べて表示

Sign in to comment.

More Answers (0)

Categories

Find more on 幾何学的変換とイメージ レジストレーション in Help Center and File Exchange

Tags

Products


Release

R2022a

Community Treasure Hunt

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

Start Hunting!