今回はノイズ除去できる画像処理手法であるメディアンフィルタについて説明していきます。
目次
メディアンフィルタの仕組み
対象の画素をp(i, j)とすると、その周囲数ピクセルの輝度の中央値をp(i,j)の値とする。これを全ピクセルに適用します。
周辺の何ピクセルを見るかの値をカーネルサイズと言います。この値を変えるとどう変わるかはこの後説明します。
![](https://i0.wp.com/deecode.net/wp-content/uploads/2020/09/ブログ用画像-3.jpg?resize=648%2C365&ssl=1)
どういうノイズ除去に使えるか・デメリット
メディアンフィルタは点々になっているノイズや細かい線を消すことができます。ただし、エッジがぼやけたり、画像全体がぼやけてしまいます。
カーネルサイズが大きくなると、ノイズをより消せる反面、エッジがぼやけたり、画像全体もぼやけてしまいます。
例えばこの夜景の絵の画像。
メディアンフィルタを適用すると星が消えてます。カーネルサイズを上げるとより大きい星が消える反面、下の建物の輪郭がぼやけていきます。
![](https://i0.wp.com/deecode.net/wp-content/uploads/2020/09/ブログ用画像-1.jpg?resize=648%2C365&ssl=1)
次に古い感じの線が入った画像。
メディアンフィルタを適用したら、画像全体がぼやけるものの細い線がある程度消えていることが分かります。
![](https://i0.wp.com/deecode.net/wp-content/uploads/2020/09/ブログ用画像-2-2.jpg?resize=648%2C365&ssl=1)
Python OpenCVを使った実装
Python、OpenCV使えばこれだけで済む。
import cv2
img = cv2.imread(ファイルパス)
kernel_size = 3
img = cv2.medianBlur(img, kernel_size)