質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

561閲覧

なぜもとまるのでしょうか?

退会済みユーザー

退会済みユーザー

総合スコア0

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/12/22 10:44

編集2021/12/23 03:58

ガンマ補正に最適な値を設定する方法のサイトを使って勉強しているのですが、なぜこの式でもとまるのかに疑問を持ちました。
自分は今までこういうものとして使っていたのですが、
この式でなんでがもとまるのか?
この式で求めることのメリットはなんなのかを教えていただきたいです。

何卒お願い致します。

python

1# compute gamma = log(mid*255)/log(mean) 2mid = 0.5 3mean = np.mean(gray) 4gamma = math.log(mid*255)/math.log(mean)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tiitoi

2021/12/22 11:35

ガンマ補正は画像が [0, 1] の範囲に正規化されていた場合 y = x^γ なので、そのコードだと 0.5 = mean(Image)^γ を満たす、つまり γ = log 0.5 / log mean(Image) でγを求めてることになりますね
guest

回答2

0

ベストアンサー

mid = 0.5
mean = np.mean(gray)
gamma = math.log(mid*255)/math.log(mean)

正直,これだけでは情報不足です.

  • gray の値域がどうなっているのか?
  • gamma をどう使うつもりなのか?

(ふつーは(?),[0:1]に正規化した世界で考えるものなんじゃないかと思うのですが,どうにもそんな感じに見えないような…)
仮に,

f(x) = x^gamma

なる式で変換するのだとしたら,gamma = math.log(mid*255)/math.log(mean) なる式で求めた gamma の値というのは,
「入力値meanの変換結果が mid*255 になるような値」です:

mid*255 = mean^gamma

から gammma を逆算すれば,

log_mean(mid*255) = gamma
(ここで "log_mean" は mean を底としたlog)

であり,これの左辺に 底の変換 を施せば

log( mid*255 ) / log(mean) = gamma

です.


この式でガンマ値を求めることのメリットはなんなのか

(えぇー…… これが そもそもの話 でしょうに,それを把握せずに何故このコードを延々と触っているのか……)

  • 変換結果は gamma の値次第である.この値次第で結果の良し悪しが変わるということだ.
  • ある入力画像に対して「良い変換結果」を生じる gamma の値はいくつなのか? というのは,入力画像次第である.

つまり「良い結果」が欲しいならば,画像毎に適切な gamma の値を都度決めねばならないということだ.

  • で,要は自動的に「良い」gamma の値を定めたいという話をやってるんだよね? 今.
  • で,この式だと,「mean(入力画像の明るさの平均)の変換結果が丁度中間輝度になれば良い感じの結果と言えるんじゃね?」という話だよね.

※補足

ふつーは(?),この手の式をそうやってダイレクトには使わないと思うよ.
([0:1]に正規化した世界で言えば)ガンマカーブの両端には変換の前後で値が変わらない場所があるのだから,この式は「mean が取り得る値の全域にわたって通用する物ではない」からだ.
未知の入力を扱う話なのであれば,当然ながら mean が極端に 暗い/明るい 場合に備えるべき.
(少なくとも分母が計算できないような場合には備えないと,プログラムとしてダメっしょ)

投稿2021/12/23 01:34

編集2021/12/23 02:18
fana

総合スコア11996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2021/12/23 01:54

「画像全域に同一のガンマ変換をかける」という話なのだから, 当然ながら,話の前提的に(暗黙的に),この画像は「全体的に明るい」 とか この画像は「全体的に暗い」 とかいう入力を想定している話であろう. すなわち,この方法では 「画像のある場所は極端に暗くて別の場所は極端に明るい」みたいな「ダイナミックレンジが不足してる感!」な入力画像はうまく扱えない. (そもそもそんな絵は一律な輝度変換では救えないのだから)
fana

2021/12/23 02:12 編集

[0:1]に正規化した世界なら変換結果も[0:1]なわけだが, このコードは,[0:1]に正規化してないように見えるので,γ>1.0 のときには明るい側が飽和しちゃう処理になってる. 質問文に提示されているリンク先にて clip(0,255) とかいうのが入ってるから「狙って」飽和させていると見える. (暗所に諧調数を割くことを優先事項と考えているのかな?) ↓ > Results are often reasonable, especially for dark image, but do not work in all cases. とか述べられているね. #何のためにこのコードに触れているのか,その目的は知らなけども,正規化した世界で処理する場合との結果比較とかしてみれば良いのかもね.
退会済みユーザー

退会済みユーザー

2021/12/23 02:01

ありがとうございます。 他にも分かることがあれば是非教えて頂きたいです。
fana

2021/12/23 02:09

質問が存在して→それへの回答が書かれる わけで,「他にも分かることがあれば」とか言われても困るっす. これはおせっかいな助言かもしれないけども, 取り組み姿勢に疑問を持たれるような話を繰り返していると次第に回答が付き難くなっていくと思うよ.
退会済みユーザー

退会済みユーザー

2021/12/23 03:44

ご忠告ありがとうございます。 fana様にご忠告されてから, 自分の勉強の姿勢が教えてください。 というのを、自覚しております。 そのため、今回の質問もいいわけになるのですが、自分で調べていたのですが tiitoi様の方法しか出てこず、数式変化も調べてもどうしてそうなるのかわかリませんでした。 本当に申し訳ないのですが、今後も自分ではわからないことが多くあると思うのですが、何卒お願いします。
fana

2021/12/23 04:13

数式を見て意味がわからんときには,実際に値を突っ込んで振る舞いを観測することです. 今回の場合で言えば, meanの取り得る範囲が 0~255 なのであれば,例えば,mean = 0,31,63,...,255 とか適当に複数のmeanの値に関してgammaの値がいくつになるのかを求めてみればいい. gamma値の変化だけでは意味が把握できないならば,さらにその各gammaの値に関して, f(x) = x^gamma のグラフを(xが取り得る範囲に関して)描いてみればいい. これはエクセルでも自前プログラムでも何でもいいから好きな道具を使ってやってみればいい. meanの値の変化によってグラフ形状(画像変換結果)がどう変わるのかを見ればそれで意味が分かるハズ.
fana

2021/12/23 04:16 編集

仮にそこまでやっても把握できないとしても,それで質問するとなった際には 数式だけを他者にぶん投げるのではなくて, 「この数式はどうやらこういう結果を生じるのだけども…」という情報を示す方が, 誰かがその情報を見てそれに基づいて何かを考えてくれる可能性が上がるでしょう. 今回はまぁ式見れば即わかるような話だったけども,そういう作業を経ないとつかめないようなブツだったらよほど奇特な人じゃないとわざわざそんな作業やってくれないんじゃないかな.(そして丸投げの印象だけが残ってそれが後を引くことになりかねない)
guest

0

How to set the best value for gamma correction

のbestとはgoodの最上級で、「少なくとも三つあるもののうちで最良」という意味です。
ひとつしかないものは、一部の例外を除いてbestという言い方はしません。(例外:my best wifeなど)

ガンマ値にはいろいろな値を決めることができ、その中で(記述者が)最も良い(と主観的に思った)値を得るアルゴリズムがそこに書かれているのでしょう。

私は、人間の色覚は人によって違うという研究があることを知っていますので、すべての人にとって最良であるようなガンマ補正というのは本質的に無理だと考えています。
以下の記事をお読みいただければ私の言いたいことはわかっていただけると思います。
[常人の100倍もの色を見分ける「4色型色覚」を持つ女性がいるのはなぜか?]
(https://gigazine.net/news/20160113-mystery-of-tetrachromacy/)

投稿2021/12/22 10:53

編集2021/12/22 11:08
ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2021/12/23 02:23 編集

低評価理由: これでは質問に答えていないと思う.(件の式の意味に関する情報が何も無い)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問