2.3.3 ヒストグラム(コントラスト)のマッチング


目次へのリンク

MATLABによる画像処理・コンピュータービジョン入門目次

概要

MATLABによるヒストグラムマッチングについて紹介します。いつもどおりとてもシンプルです。
Image Processing Toolboxが必要です。
対応ファイル:I2_03_3_histmatch.m

初期化

Code
clear;clc;close all;imtool close all

画像の読込み・表示

まず、画像を読み込みます。

Code
Ref = imread('I2_03_3_knee1a.tif');  % 膝のMRIイメージの読込み
  A = imread('I2_03_3_knee1b.tif');
figure;imshow([Ref A]);

ご覧の通り、明るさが画像間で異なっていることがわかります。

ヒストグラム表示

ヒストグラムでそれぞれの輝度分布を見てみましょう

Code
figure;
subplot(2,2,1);imhist(Ref);title('リファレンス');
subplot(2,2,2);imhist(  A);

目視でわかる通り、リファレンス画像に対して、knee1bの方は輝度が小さいことがわかります。

ヒストグラムのマッチング

リファレンスにマッチするように、knee1bの輝度分布を補正してあげます。

Code
B = imhistmatch(A, Ref, 256);  % AのヒストグラムをRefに一致させる
subplot(2,2,4);imhist(B);title('処理結果'); shg;

きちんと補正されている様子がわかりますね。

結果の表示

Code
figure;imshow([Ref repmat(239,[512 20]) B]);

結果として見た目がほぼ同じになりました!

imhistに関しては、経験から1 点注意が必要です。それは入力する画像データの型ですね。
uint8型だと0-255の範囲でヒストグラムをプロットしてくれます。
singleかdoubleだと0-1の範囲でヒストグラムをプロットしてくれます。注意が必要なのはこの浮動小数点型の時ですね。データの絵dswpqぉmk、範囲が0-1に納まっていないと当然出てくるプロットは役に立たないものになりますので、ご注意いただければと思います。データの正規化にはrescale関数が使えますヨ。

謝辞

本記事は @eigs さんのlivescript2markdownを使わせていただいてます。

目次へのリンク

MATLABによる画像処理・コンピュータービジョン入門目次