質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

フィルタ

フィルタとは、特定の条件に合わせてデータへのアクセスをブロックするプログラムやルーチンを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

1388閲覧

画像からノイズを取り除く

takerunmh

総合スコア5

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

フィルタ

フィルタとは、特定の条件に合わせてデータへのアクセスをブロックするプログラムやルーチンを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/10/19 11:26

イメージ説明
この画像からできる限りノイズを取り除いた画像を作成することが目的です。
バイテラルフィルタ、ガウンシアンフィルタ、平均化フィルタ、中央値フィルタを使用してノイズを取り除きます。
今までのソースコードが下にあるのです。

Python

1import cv2, matplotlib 2import numpy as np 3 4img_src = cv2.imread('OpenCV.jpg') 5 6k = 3.0 7 8op = np.array([[-k, -k, -k], 9 [-k, 1+8*k, -k], 10 [-k, -k, -k]]) 11 12img_a = cv2.blur(img_src,ksize=(9,9)) 13img_b = cv2.GaussianBlur(img_a,(5, 5),1) 14img_c = cv2.bilateralFilter(img_b,9,1,1) 15img_d = cv2.bilateralFilter(img_c,9,100,100) 16img_e = cv2.bilateralFilter(img_d,9,1,1) 17img_f = cv2.bilateralFilter(img_e,9,100,100) 18img_g = cv2.medianBlur(img_f,11) 19img_h = cv2.GaussianBlur(img_g,(5, 5),1) 20img_i = cv2.GaussianBlur(img_h,(5, 5),1) 21img_j = cv2.bilateralFilter(img_i,9,100,100) 22img_k = cv2.bilateralFilter(img_j,9,100,100) 23img_l = cv2.filter2D(img_k, ddepth=-10, kernel=op) 24img_m = cv2.convertScaleAbs(img_l) 25img_n = cv2.filter2D(img_m, ddepth=-10, kernel=op) 26img_o = cv2.convertScaleAbs(img_n) 27 28cv2.imwrite('5-3.m.jpg', img_o) 29 30cv2.imshow('image_m', img_o) 31

これを実行すると下の図のようになります。できるだけきれいな画像を作成するのですがこれ以上やってもかわりそうにありません。工夫があれば教えて頂きたいです。
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

(1年半以上経っているいるけども,使えるかもしれない関数の存在を知ったので書いておく.)

fastNlMeansDenoising とか fastNlMeansDenoisingColored というのがあるようだ.
画像内の似たパッチ群の平均を用いるような手法である模様.

cv::fastNlMeansDenoisingColored( Img,Result, 10,10 ); と,第三引数を{25, 50}に変えてみた結果を示す.
(左から順に第三引数の値が 10, 25, 50)

一番左は緑の部分のノイズはだいぶ減っているが他の箇所は良い結果ではない.
パラメタ値を大きくするについれて,他所のノイズ除去も進む感じの結果となっている.

一番右の結果を質問文内に提示された画像と比較すると,同等程度にノイズは除去されているが輪郭が良く保たれているように見える.

イメージ説明

投稿2022/06/08 02:18

fana

総合スコア11658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

結果が良いかどうかはわかりませんし,わりとこの画像に特化した話になっていますが……
何かの参考になれば.


(1)まずは,「背景の黒い領域の雑音を減らす」ことを考えてみました.

  1. 元画像を erode→dilate することで強引に背景領域のノイズが少ない画像を生成
  2. 元画像を走査し,周囲と比較して十分画素値が高い場合には前記1.の画素値に置き換える

(これを各chで独立に行いました)

結果:背景のノイズがいくらか低減したようにも見えます.
イメージ説明

(2)次に,この結果にさらにMedian Blurを実施することで,

  • 背景領域に残った孤立点的なノイズの除去
  • 模様部分の暗いノイズの除去

を狙いましたが…

前者の効果は微小(良くない副作用として,背景領域のノイズがくっついて島になってしまう箇所もある)
後者の効果としては,文字の箇所がぼけるのと引き換えにノイズ感が減るかな?

といった結果に留まりました:
イメージ説明


[追記]

セグメンテーション方面から考えて,pyrMeanShiftFiltering()に元画像を食わせてみました.
対象が本件の画像のような(自然画像ではなくて)「べた塗りな画像」であるならば,こういう方向からのアプローチも有り得るのではないかと思います.

イメージ説明

C++

1//※Srcが元画像.処理パラメタ{10,64}はてきとー 2cv::pyrMeanShiftFiltering( Src, Result, 10, 64 );

投稿2020/10/20 02:38

編集2020/10/21 01:44
fana

総合スコア11658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takerunmh

2020/10/20 12:56

ありがとうございます!挑戦してみます。
fana

2020/10/21 01:19

この絵はこんな感じだと思います: ・ノイズの(個数的な)量が多すぎて,Median Filterに期待されるノイズ軽減効果を得るのは難しい. ・ノイズの(画素値の変化量的な)効果が強すぎて,Bilateral Filterは有効に機能しない
fana

2020/10/21 01:45 編集

どうにかして {黒(背景),白(文字),赤,緑,青}の領域をセグメンテーションするようなことができれば(←私には無理^^), 領域毎に画素値を推定するような方向性が考えられるかもしれませんが… →回答内に追記: Mean-Shiftによる領域分割が使えそうな気がしたので,cv::pyrMeanShiftFiltering()に元画像を食わせてみました.
fana

2020/10/21 11:38 編集

ノイズ除去の方法についてググってみると, ”視覚特性を考慮したエッジ適応型ノイズ除去アルゴリズム”, 映像情報メディア学会誌Vol. 69, No. 3, pp. J98~J105(2015) とか,これから引用されている A. Buades, B. Coll and J.-M. Morel: "A non-local algorithm for imagedenoising", IEEE Computer Society Conference(2005) とか,結果例を見るとかなり綺麗です. (内容を理解できる気はしませんが…)
takerunmh

2020/10/21 11:26

細かいところまでありがとうございます! セグメンテーションは分かってないので難しいですね。 頑張ってみます!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問