はじめに
フラットフィールド補正は,画像から背景成分(低周波な輝度ムラ)を除去する処理です。輝度ムラは,画像解析する上で邪魔なので,除去対象になります。
以下のQiita記事で,フラットフィールド補正が取り上げられています。
(参考1) Flat Field画像処理
上記のQiita記事では,以下のサイトが参照されています。
(参考2) 背景除去について
これらの記事では,画像を強く平滑化して低周波成分を抽出し
(方法1:除算補正) 元画像÷低周波成分×平均輝度値
(方法2:差分補正) 元画像‐低周波成分+平均輝度値
というシンプルな補正方法が紹介されています。
試してみた
(参考2)からサンプル画像を拝借して,自分でも試してみました。
低周波成分の抽出には,半値幅40画素の等方的なガウシアンフィルタを用いました。
サンプル画像 | 低周波成分 |
---|---|
除算補正 | 差分補正 |
---|---|
想定通り,低周波な輝度ムラはうまく除去できしたが,(参考2)で言及されているように,サンプル画像には縞状のムラも存在していて,そちらはうまく除去できません。
(参考2)では,対処方法として,補正後(?)の画像のフーリエ変換を計算し,縞の走行方向(上下方向)に対応する周波数成分をカットして,縞状のムラの除去に成功しています👇
バンドパスフィルタ | 逆フーリエ変換の結果 |
---|---|
(参考2)では,この方法の注意点が付記されています。その通りと思います。
- 万能ではありません
- FFT自体の処理は時間がかかります。さらにパディングなんかしたら処理時間はさらにup。
今回の記事では,万能ではないけど,処理時間を増やさずに(むしろ減らせる) ,縞状のムラも除去できる補正方法を紹介します。
はじめに言っておくと,全くもって大したものではありません
解決策:非等方な平滑化
非等方な平滑化フィルタを用いたら,余計な成分をうまく抽出できました。 以上です!
(参考2)では等方的な平滑化フィルタを用いていますが,縦方向のフィルタ幅だけを小さくした「非等方的な平滑化フィルタ」 を用いたら,縞状のムラも抽出できるはずと思い,試してみたという感じです。
処理結果は以下です。ここでは,横方向の半値幅40画素,縦方向の半値幅2画素の非等方なガウシアンフィルタ(非常に横長なフィルタ)を用いました。
サンプル画像 | 余計な成分(低周波成分+縞成分) |
---|---|
除算補正 | 差分補正 |
---|---|
期待通り,「余計な成分」として,低周波な輝度ムラだけでなく,縞状のムラも抽出できています 補正結果もいい感じです
最後に
今回紹介した方法も,先験情報として縞の走行方向を利用しているので,決して万能ではありませんが,非等方的なフィルタ処理の計算コストは,等方的なフィルタよりも小さく,処理時間は減ります。フィルタのウィンドウサイズが小さいためです。
なお,縞状のムラの除去は,画像処理分野では「Stripe removal」と呼ばれていて,伝統的に研究されており,数多くのアルゴリズムが提案されています。
Google Scholar検索 "Stripe removal"
X線CTの投影データや衛星画像を対象にした研究が多いイメージです。最近は,深層学習ベースの帰納的な手法が多いようですが,縞模様の行列・テンソルとしての低ランク性に着目した演繹的な手法も結構あり,色々と勉強になりそうです。
以上です。