負の値を持つノイズの作成

4 views (last 30 days)
RYO ARATA
RYO ARATA on 27 Oct 2022
Edited: Atsushi Ueno on 28 Oct 2022
以下のコードにて信号が0のみの画像(A)に平均0、分散Bのノイズを加えてノイズ画像の作成をしたいのですが、負の値が0になってしまいす。負の値を残すにはどのようにすればよいでしょうか?
imnoise(A,'gaussian',0,B)

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 27 Oct 2022
Edited: Atsushi Ueno on 28 Oct 2022
>負の値を残すにはどのようにすればよいでしょうか?
⇒ 整数型なら符号有整数型を用います。但しint16型に限られます。
% I — グレースケール イメージ:数値配列
% データ型: single | double | int16 | uint8 | uint16
% メモ:ポアソン ノイズでは、imnoise はデータ型 int16 のイメージをサポートしていません。
A = int16(zeros(100)); % 信号が 0 のみのイメージデータ (符号有整数 int16 型)
m = 0; B = 0.05; % m:平均、B:分散 (大き過ぎると -32768~32767 を超え飽和する)
C = imnoise(A,'gaussian',m,B);
surf(C)

More Answers (2)

Atsushi Ueno
Atsushi Ueno on 27 Oct 2022
>負の値を残すにはどのようにすればよいでしょうか?
⇒ 浮動小数点数(singleかdouble)型なら、0~1に収まる範囲の平均と分散を設定したimnoise関数の結果を調整します。
% imnoise では、データ型 double および single のピクセル値が [0, 1] の範囲内にあると想定しています。
% 関数 rescale を使用して、想定される範囲にピクセル値を調整できます。
% イメージが、[0,1] の範囲外の値をもつ double 型または single 型の場合、
% imnoise は、ノイズを追加する前に入力ピクセル値を [0, 1] の範囲にクリッピングします。
A = double(zeros(100)); % 信号が 0 のみのイメージデータ (浮動小数点数 double 型)
m = 0.5; B = 0.05; % m:平均、B:分散 (大き過ぎると 0~1 を超え飽和する)
C = imnoise(A,'gaussian',m,B) - m; % 結果から平均を引いてゼロ中心にする
surf(C)

Atsushi Ueno
Atsushi Ueno on 27 Oct 2022
>負の値を残すにはどのようにすればよいでしょうか?
⇒ 浮動小数点数(singleかdouble)型なら、imnoise関数の様な制約の無いrandn関数でノイズを生成する事が出来ます。
surf(randn(100));

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!