转自:图像处理:椒盐噪声(杂点)
Posted on 收藏1.效果图:
2.实现原理:
在处理每一个像素点时,取得一个随机值与指定的杂点出现概率的值进行判断,以决定是否修改当前像素点的颜色值,如果需要修改,则设定一个随机的颜色值。
3.实现代码:
3
4
5
6
7
8
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
26
27
28
29
30
31
33
35
37
38
39
40
41
42
43
44
45
46
47
48
49
3
4
5
6
7
8
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
40
42
43
44
45
46
47
48
49
50
51
52
53
4.程序说明:
A.利用LockBits方法做图像处理效率明显高于利用GetPixel方法和SetPixel方法,可比较与柔化(平滑)处理。
B.关于"方法一"
(1)编译时可能会出现错误提示“不安全代码只会在使用 /unsafe 编译的情况下出现”,处理如下:
右击项目选择"属性"-->"生成"-->勾选"允许不安全代码"-->"保存"。
(2)p += 4:
由于PixelFormat format = PixelFormat.Format32bppArgb;
指定图像中每个像素的颜色数据的格式为每像素 32 位;alpha、红色、绿色和蓝色分量各使用 8 位。
所以图像像素颜色值的存储用4个字节,分别表示B、G、R、A,各占一个字节,
p[0]:B、 p[1]:G、 p[2]:R、 p[3]:A,p+=4表示到当前像素的下一个像素的开始位置。
C.关于"方法二"
(1)Marshal.Copy()将图像数据从非托管内存指针复制到托管的数组,避免使用不安全代码。
(2)int numBytes = width * height * 4;
存放图像像素数据的数组长度 = 总像素数 * 每个像素所占的字节数。
1.效果图:
2.实现原理:
在处理每一个像素点时,取得一个随机值与指定的杂点出现概率的值进行判断,以决定是否修改当前像素点的颜色值,如果需要修改,则设定一个随机的颜色值。
3.实现代码:
3
4
5
6
7
8
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
26
27
28
29
30
31
33
35
37
38
39
40
41
42
43
44
45
46
47
48
49
3
4
5
6
7
8
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
40
42
43
44
45
46
47
48
49
50
51
52
53
4.程序说明:
A.利用LockBits方法做图像处理效率明显高于利用GetPixel方法和SetPixel方法,可比较与柔化(平滑)处理。
B.关于"方法一"
(1)编译时可能会出现错误提示“不安全代码只会在使用 /unsafe 编译的情况下出现”,处理如下:
右击项目选择"属性"-->"生成"-->勾选"允许不安全代码"-->"保存"。
(2)p += 4:
由于PixelFormat format = PixelFormat.Format32bppArgb;
指定图像中每个像素的颜色数据的格式为每像素 32 位;alpha、红色、绿色和蓝色分量各使用 8 位。
所以图像像素颜色值的存储用4个字节,分别表示B、G、R、A,各占一个字节,
p[0]:B、 p[1]:G、 p[2]:R、 p[3]:A,p+=4表示到当前像素的下一个像素的开始位置。
C.关于"方法二"
(1)Marshal.Copy()将图像数据从非托管内存指针复制到托管的数组,避免使用不安全代码。
(2)int numBytes = width * height * 4;
存放图像像素数据的数组长度 = 总像素数 * 每个像素所占的字节数。