MATLAB Answers

グレースケール画像の輝度値のみを変更する方法

17 views (last 30 days)
グレースケールに変換した画像の輝度値をある式(例えば、y=2X+1)に投入し、算出したyの値に変換した画像を作りたいと思っています。
変更範囲は画像全体の場合と特定の箇所(複数のピクセル)の場合の2パターンを考えています。
どのようにしたら良いでしょうか。ご回答いただけると幸いです。

  0 Comments

Sign in to comment.

Accepted Answer

Kenta
Kenta on 17 Jan 2020
こんにちは、画像の変数Iも行列と同様に、.*(ドットと掛け算)を用いて各要素をそのまま掛け算できます。
ある場所にしたかったら、下のような書き方をすれば範囲を指定できるので、同様にすれば指定の範囲だけ計算できます。
imtool(対象画像の変数名)でピクセルの情報などが読めるので、それを利用して位置を定めてもよいかもしれません。
result.PNG
clear;clc
I=imread('onion.png');
I2=I.*2+1;
figure;imshow(I2)
imtool(I)
I3=I;
h1=50;
h2=100;
w1=30;
w2=90;
I3(h1:h2,w1:w2,:)=I3(h1:h2,w1:w2,:).*2+1;
figure;imshow(I3)

  3 Comments

Natsumi Nakatani
Natsumi Nakatani on 20 Jan 2020
ご回答ありがとうございます。大変参考になりました。
ちなみに、式がもっと複雑(例えば、y=e^xのような指数関数やy=log10(x)のような対数関数)になった際はどのようにすればよろしいでしょうか?
Kenta
Kenta on 20 Jan 2020
参考になり、よかったです。arrayfunを使えばできます。
例えば以下のようです。
result.PNG
a=randi(10,[3 3])
disp('各ピクセルの値をxとすると、2のx乗+1の値を計算')
b=arrayfun(@(x) 2^x+1, a)
Natsumi Nakatani
Natsumi Nakatani on 20 Jan 2020
早速ご回答いただきありがとうございます。おかげ様でできました。

Sign in to comment.

More Answers (0)

Sign in to answer this question.