1

次の画像 (ナンバー プレート) があり、0.9 の確率でごま塩ノイズの影響を受けました (各ピクセルは 90% の確率で完全に白または完全に黒くなりました)。数字を読みやすくするために、できるだけきれいにする必要があります。私は Python で許可されている基本的なアルゴリズムを持っていますが、変更は許可されています。そして、どうにかしてイメージを明確にする必要があります。画像をピクセルの白黒ビットマップに変換してマトリックスにロードし、すべてのアルゴリズムをマトリックスで直接実行します。私たちは 2 つのバリエーションの中央値を使用します - 私は両方の組み合わせを何度も試しましたが、どちらも役に立ちませんでした - 明確な画像は得られませんでした. どうしても助けが必要です!

コードと画像は、skydrive の次の場所にあります: http://sdrv.ms/1az6sRC コードを使用するには、Python 3.2 が必要であり、Python で画像を表示するには、ディレクトリ内のアドオンをインストールする必要があります。 . クラスマトリックスをインポートする必要があり、関数 clean を含むファイルcleaning.pyには私の試みが含まれています.

どんな助けでも大歓迎です。

4

3 に答える 3

1

従来のごま塩画像ノイズ除去フィルターは、ノイズ確率が約 40% (画像ピクセルが反転する確率) の場合に適しています。あなたの場合、密度ノイズがあります。問題を解決するには、計算コストの高い中央値ベースのフィルターを使用する必要があります。この論文の結果をよく見ると、達成可能のように見えますが、実装する必要があります。

于 2014-01-19T14:15:31.200 に答える
1

メディアン フィルターはごま塩問題を解決しますが、画像がぼやけます。ごま塩問題を解決して元の写真を保存するには、Alpha Trim Filterを使用する必要があります 。フィルターのアイデア:

1-要素の上にウィンドウを配置します

2-要素をピックアップ

3-要素を注文する

4-取得した順序付きセットの最初と最後にある要素を破棄します(アルファ入力値に従って)

5- 平均を取る — 残りの要素を合計し、合計をその数で割ります。

matlab を使用して実装できます。以前に実装された多くのアルファ トリム フィルターがあり、それを使用して Python プログラムを matlab にリンクできます。

それについての私の背景はあまり意志ではないので、Pythonを扱うことについてすみません

于 2014-01-18T21:01:19.577 に答える
0

こんにちは、90% のノイズがあるため、メディアン フィルターまたは最大フィルターを使用できます。以下のコードを C++ で参照してください。ただし、簡単に python に関連付けることができます。//maxOrmedian = True/False, inputImage = std::vector , kernalSize = 3, width = 256, height= 256 //

 std::vector<double> medianFilter(bool maxOrmedian, std::vector<double> inputImage, double kernalSize,int width, int height)
    {
       /* Fill all the values to output image */
       vector<double> outImage = inputImage;
      for(int y = kernalSize; y < height - kernalSize; y++)
      {
         for(int x = kernalSize; x < width - kernalSize; x++)
         {
           std::vector<double> tempList;
           for(int i = - kernalSize; i <= kernalSize; i++)
             {
               for(int j = -kernalSize; j <= kernalSize; j++)
                 {
                   double pixelValue = inputImage[(y+j)*width + (x+i)];
                   tempList.push_back(pixelValue);
                 }
             }
            std::sort(tempList.begin(),tempList.end());
            double newPixelValue = 0;
            if(maxOrmedian) //median filter
               newPixelValue = tempList[tempList.size()/2];
            else
               newPixelValue = tempList[tempList.size()-1];
            outImage[y*width + x] = newPixelValue;
          }
       }   
      return outImage;          
     } 
于 2015-04-13T06:59:31.613 に答える