ホットピクセルが発生した場合、取り除くためには
大きく二つの方法があります。
1:photoshopのダスト&クラッチ機能をつかう。
2:一つ一つスタンプツールなどで塗りつぶす
1は一気にできますが、画像全体の解像度が若干下がるのが弱点
2は数が多いと面倒くさいのが弱点
ダストクラッチ
なので、ホットピクセルを検出して除外できるソフトを作りたいなと
ずっと思っていました。
そして最近は
ChatGPTがGPT-4oになり、プログラミングの性能も大幅に上がりました。
ホットピクセルが発生している画像を見せて、
こういうノイズを除去するプログラムを作りたい、というとアルゴリズム含めて考えてくれます。
複数の案を提案してくれて、その中から選んだり、
こういう方法もいいかもと議論しながら進められる。
最終的にはアルゴはほとんど自分で考えましたが…
誤検出を無くすなどで仕様がかなり細かくなってくるとなかなか
思った通りの出力は一発で返してくれない…。
最終的には、カメラの機種や撮影環境によって、
ホットピクセルの出方も異なるので、パラメータを自分で設定できるようにしました。

各パラメータの意味
・color_thresh
上の図のようにホットピクセルに色がついているとき、
周辺との色の違いで判断して補正するパラメータ。
この値が大きい程大きい色付きのホットピクセルだけしか補正されなくなります。
大きくすれば誤補正も減ります。
・val_thresh
ホットピクセルは周辺より輝度が高いので、その輝度の差で見つけるための閾値です。
この値が大きい程、周辺との輝度が高い部分しか見つけなくなります。
・max_area
ホットピクセルの面積です。
1だと1ピクセルだけのホットピクセルしか見つけません。
・expend_radius
下の図のように色が周辺まで広がってるようなホットピクセルで、
補正後に補正痕が残る場合はこの値を大きくしてください。
補正痕が残った例
・GPUを使用
GeForceのグラボを積んでる場合はこのボタンで高速化できます
(それでも画像サイズによってはかなり時間かかる)
・DCT除外を使用
木の葉っぱなど細かい模様のところで誤検出が起きる場合、
このチェックを入れることで、画像の高周波部分を検出から除外できます。
(ただし時間がさらにかかります)
矢印のところは誤補正していたのが、DCT除外オンだと誤補正せずに元と同じ形状になっています。
あと、パラメータ調整するとき、全体を緩めにしすぎると
ものすごい時間かかるので注意してください。
これでも、頑張って高速化しました…。
(GPTが高速化のところはなかなか気が利かず)
コードはこちら
ダウンロード - hotpixel_removal.zip
(二次配布禁止)
pythonなので、必要なライブラリをインストールして使ってください。
ライブラリインストールコマンド
pip install opencv-python numpy torch pillow piexif scipy scikit-image PyQt5
実行は以下のコマンドです。
python hotpixel_gui.py
おすすめパラメータ
このようにホットピクセルが大きくて色付きがあるとき
color_thresh:19
val_thresh:42
max_area:16
expend_radius:4
出力
ホットピクセルが点状のノイズの時
color_thresh:17
val_thresh:21
max_area:14
expend_radius:1
出力
最近のコメント