2011-07-18 9 views
4

画像が2つあります。最初のものはバックグラウンドノイズ+コンテンツで、もう1つはバックグラウンドノイズです。最初から2番目の画像を差し引いて、コンテンツからノイズを除去したいと思います。画像はグレースケールです。画像から背景ノイズを除去する

これを処理するさまざまな方法と、mathematicaのグレースケール値の扱いには混乱します。

1)まず、ImageSubtract[imageOne, imageTwo]を使用します。

2)ImageDifference[imageOne, imageTwo]を使用すると、負のピクセル値は避けられますが、画像はImageSubtractを使用するときに負のピクセルを持つ必要があった場所では人工的です。

3)ImageDataを使用して各ピクセルの値を取得し、対応する値をそれぞれ減算してから、Imageを使用して結果を表示します。

これらの方法のそれぞれが異なる結果をもたらします。実数型の画像について

+3

あなたの画像をどこかにアップロードしてください... –

答えて

6

、画素値が負であることができ、これらの3つの操作は等価である:

real1 = Image[RandomReal[1, {10, 10}]]; 
real2 = Image[RandomReal[1, {10, 10}]]; 

ImageData[ImageDifference[real1, real2]] == 
[email protected][ImageSubtract[real1, real2]] == 
Abs[ImageData[real1] - ImageData[real2]] 

Out[4]= True 

しかし、整数データ型の画像とそうではありません。

int1 = Image[RandomInteger[255, {10, 10}], "Byte"]; 
int2 = Image[RandomInteger[255, {10, 10}], "Byte"]; 

これは依然としてTrueある:

ImageData[ImageDifference[int1, int2]] 
== Abs[ImageData[int1] - ImageData[int2]] 

しかし、これら二つの正の値のみが、このようなイメージに格納することができ、および減算から負の結果が出力画像にゼロにクリップされているからです「実」または「REAL32」データ型の両方の入力画像を変換する際にあまり不可解な結果があるでしょう

ImageData[ImageDifference[int1, int2]] 
== [email protected][ImageSubtract[int1, int2]] 

:理由クリッピング異なるされています。

+1

私は余分なものとして削除された私よりずっと完全です。 – acl

関連する問題