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

10 visualizaciones (últimos 30 días)
宗樹 岡本
宗樹 岡本 el 8 de Oct. de 2023
Comentada: Atsushi Ueno el 24 de Oct. de 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画像を表示し,フォルダに保存する方法をご教授お願い致します。
よろしくお願いいたします。

Respuesta aceptada

Atsushi Ueno
Atsushi Ueno el 8 de Oct. de 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 comentarios
宗樹 岡本
宗樹 岡本 el 24 de Oct. de 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 el 24 de Oct. de 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画像を並べて表示

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre 幾何学的変換とイメージ レジストレーション en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2022a

Community Treasure Hunt

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

Start Hunting!