[5d12a0]: / ants / ops / add_noise_to_image.py

Download this file

81 lines (66 with data), 2.8 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
__all__ = ["add_noise_to_image"]
import ants
from ants.decorators import image_method
from ants.internal import get_lib_fn
@image_method
def add_noise_to_image(image,
noise_model,
noise_parameters
):
"""
Add noise to an image using additive Gaussian, salt-and-pepper,
shot, or speckle noise.
Arguments
---------
image : ANTsImage
scalar image.
noise_model : string
'additivegaussian', 'saltandpepper', 'shot', or 'speckle'.
noise_parameters : tuple or array or float
'additivegaussian': (mean, standardDeviation)
'saltandpepper': (probability, saltValue, pepperValue)
'shot': scale
'speckle': standardDeviation
Returns
-------
ANTsImage
Example
-------
>>> import ants
>>> image = ants.image_read(ants.get_ants_data('r16'))
>>> noise_image = ants.add_noise_to_image(image, 'additivegaussian', (0.0, 1.0))
>>> noise_image = ants.add_noise_to_image(image, 'saltandpepper', (0.1, 0.0, 100.0))
>>> noise_image = ants.add_noise_to_image(image, 'shot', 1.0)
>>> noise_image = ants.add_noise_to_image(image, 'speckle', 1.0)
"""
image_dimension = image.dimension
if noise_model == 'additivegaussian':
if len(noise_parameters) != 2:
raise ValueError("Incorrect number of parameters.")
libfn = get_lib_fn("additiveGaussianNoiseF%i" % image_dimension)
noise = libfn(image.pointer, noise_parameters[0], noise_parameters[1])
output_image = ants.from_pointer(noise).clone('float')
return output_image
elif noise_model == 'saltandpepper':
if len(noise_parameters) != 3:
raise ValueError("Incorrect number of parameters.")
libfn = get_lib_fn("saltAndPepperNoiseF%i" % image_dimension)
noise = libfn(image.pointer, noise_parameters[0], noise_parameters[1], noise_parameters[2])
output_image = ants.from_pointer(noise).clone('float')
return output_image
elif noise_model == 'shot':
if not isinstance(noise_parameters, (int, float)):
raise ValueError("Incorrect parameter specification.")
libfn = get_lib_fn("shotNoiseF%i" % image_dimension)
noise = libfn(image.pointer, noise_parameters)
output_image = ants.from_pointer(noise).clone('float')
return output_image
elif noise_model == 'speckle':
if not isinstance(noise_parameters, (int, float)):
raise ValueError("Incorrect parameter specification.")
libfn = get_lib_fn("speckleNoiseF%i" % image_dimension)
noise = libfn(image.pointer, noise_parameters)
output_image = ants.from_pointer(noise).clone('float')
return output_image
else:
raise ValueError("Unknown noise model.")