はじめに
skimage.filters の rank.equalizeにより画像のコントラストを高める方法について説明する。
コード
コードをダウンロード(.pyファイル) コードをダウンロード(.ipynbファイル)解説
この例では、ローカルヒストグラム均等化と呼ばれる方法を使用して、コントラストの低い画像を強調する。exposure.equalize_hist()で均等化した画像は、ほぼ線形の累積分布関数をもつ。ローカルヒストグラム均等化では、均等化する範囲を狭めて均等化するので、白飛びする領域が少なくなる。
モジュールのインポート
画像とヒストグラム、累積ヒストグラムを表示する関数
ax_cdf = ax_hist.twinx()で、ax.hist(ヒストグラム)とax.cdf(累積ヒストグラム)の軸を共有させて、同じ図中に表示する。ax.cdfのy軸は右側の第2軸となる。
ax_hist.ticklabel_format(axis=’y’, style=’scientific’, scilimits=(2,2),useMathText=True)でヒストグラムのy軸の頻度を指数表示で表示する。style=’scientific’で指数となり、scilimits=(2,2)とuseMathText=Trueで10の2乗表示となる。
xmin, xmax = dtype_range[image.dtype.type]
ax_hist.set_xlim(xmin, xmax)
でx軸の範囲を設定する。
オリジナル画像のimage.dtype.typeは numpy.float64であり、dtype_range[image.dtype.type]は(-1,1)となる。
equalizeした画像は、mage.dtype.typeは numpy.uint8であり、dtype_range[image.dtype.type]は(0,255)となる。
img_cdf, bins = exposure.cumulative_distribution(image, bins)で画像の累積ヒストグラムデータが作成できる。
画像の読み込み
rgb2grayでグレースケール画像に変換。
画像全体を均等化
exposure.equalize_hist(img)で画像全体でコントラストを均等化できる。
局所的均等化
rank.equalizeにより、local histogram equalizationをする。selem = disk(60)で均等化する範囲のサイズを決める。ここでは、半径30の円盤上の形の領域で均等化する。
画像の表示
コメント