LoginSignup
3
3

More than 1 year has passed since last update.

ImageMagick で Equalize (ヒストグラム平坦化)

Last updated at Posted at 2021-11-25

こちらから ImageMagick に関する記述を抜き出した記事です。

ヒストグラム平坦化とは

輝度ヒストグラムの偏りを減らす事で視認性を向上させる代表的なアルゴリズムです。

例えば、暗い方に色の輝度が偏っているケース。

% echo "P2 3 3  31 \
  31 7 6 \
   5 4 3  \
   2 1 0 " | convert - -sample 300x300 3x3.png
% convert 3x3.png -equalize 3x3eq.png
実験画像(3x3.png) ヒストグラム平坦化(3x3eq.png)
3x3.png 3x3eq.png
ヒストグラム
image.png image.png

(ヒストグラムは横軸が輝度、縦軸は該当輝度のカウント数を最大値で正規化)
このように輝度の階調を均すと、見た目潰れかかっている階調が改善する傾向にあります。

画像認識の前処理でよく使われます。(お世話になっております!)

サンプルデモを作ってみたので、とりあえず画像ファイルを試しに放り込んでみて下さい。

ヒストグラム平坦化の実行

% convert IMG_0837.jpg -equalize IMG_0837-eq.jpg
オリジナル ImageMagick -equalize
IMG_0837.jpg IMG_0837-eq.jpg
ヒストグラム
image.png image.png

実装としては、R,G,B をバラバラに256個のヒストグラムで処理するのでなく、 R1,G1,B1,R2,G2,G3 のように並べて 256x3=>768個のヒストグラムで処理するだけの単純なものです。
中間処理とはいえ3倍の粒度で均すおかげか出来あがる画像も綺麗な気がします。

!Sync

ちなみにですが、ImageMagick-6.7.9-3(2012年2月リリース)まで、R,G,B バラバラに処理したり不具合があったりで色味を維持しませんでした。6.8.6-3(2013年6月)以降、今の挙動に落ち着いています。

-channel 指定で !Sync すると、R,G,B 独立して平坦化します。

こちらのイラスト画像の方が違いがわかりやすいので、サンプルして使わせて頂きます。

% convert im2758073.jpg -channel "RGB,\!Sync" -equalize imeq-nosync.jpg
オリジナル !Sync
im2758073.jpg imeq-nosync.jpg
ヒストグラム
image.png image.png

!Sync は他の用途やデバッグにも便利なので、豆知識としてどうぞ。

より高度な平坦化 (CLAHE)

今まで説明したヒストグラム平坦化は画像全体のヒストグラムをとるので、場所によって視認性が逆に下がる事もあり得ます。その点を改良した高度な手法もあります。

  • 適応ヒストグラム平坦化(AHE, Adaptive Histogram Equalization)
    • ブロックに分けてバラバラにヒストグラム平坦化処理を行い、線形補完でマージする
  • コントラスト制限適応ヒストグラム平坦化(CLAHE, Contrast Limited Adaptive Histogram Equalization)
    • AHE の改良で、ブロックに分けた分だけ局所的なノイズに弱くなるので、ヒストグラムのビンが高すぎる場合に他にバラす。

ImageMagick-7.0.8-15 から -clahe オプションが導入されました。尚、6系にはバックポートされていません。

% convert original.jpg  -equalize           im-equalize.jpg
% convert original.jpg  -clahe 20x25%+256+7 im-clahe.jpg
オリジナル写真 Equalize(ImageMagick) CLAHE(ImageMagick)
IMG_1979.jpg im-equalize.jpg im-clahe.jpg
ヒストグラム
image.png image.png image.png

CLAHE の方が看板の文字は読み易いのですが、普通の Equalize で浮かび上がっていた背景が闇のとばりに隠れていますね。一長一短といったところです。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3