1
+ from pathlib import Path
2
+
1
3
import numpy as np
2
4
from PIL import Image
3
5
4
6
5
- def rgb2gray (rgb : np .array ) -> np .array :
7
+ def rgb_to_gray (rgb : np .ndarray ) -> np .ndarray :
6
8
"""
7
9
Return gray image from rgb image
8
- >>> rgb2gray(np.array([[[127, 255, 0]]]))
10
+
11
+ >>> rgb_to_gray(np.array([[[127, 255, 0]]]))
9
12
array([[187.6453]])
10
- >>> rgb2gray (np.array([[[0, 0, 0]]]))
13
+ >>> rgb_to_gray (np.array([[[0, 0, 0]]]))
11
14
array([[0.]])
12
- >>> rgb2gray (np.array([[[2, 4, 1]]]))
15
+ >>> rgb_to_gray (np.array([[[2, 4, 1]]]))
13
16
array([[3.0598]])
14
- >>> rgb2gray (np.array([[[26, 255, 14], [5, 147, 20], [1, 200, 0]]]))
17
+ >>> rgb_to_gray (np.array([[[26, 255, 14], [5, 147, 20], [1, 200, 0]]]))
15
18
array([[159.0524, 90.0635, 117.6989]])
16
19
"""
17
20
r , g , b = rgb [:, :, 0 ], rgb [:, :, 1 ], rgb [:, :, 2 ]
18
21
return 0.2989 * r + 0.5870 * g + 0.1140 * b
19
22
20
23
21
- def gray2binary (gray : np .array ) -> np .array :
24
+ def gray_to_binary (gray : np .ndarray ) -> np .ndarray :
22
25
"""
23
26
Return binary image from gray image
24
27
25
- >>> gray2binary (np.array([[127, 255, 0]]))
28
+ >>> gray_to_binary (np.array([[127, 255, 0]]))
26
29
array([[False, True, False]])
27
- >>> gray2binary (np.array([[0]]))
30
+ >>> gray_to_binary (np.array([[0]]))
28
31
array([[False]])
29
- >>> gray2binary (np.array([[26.2409, 4.9315, 1.4729]]))
32
+ >>> gray_to_binary (np.array([[26.2409, 4.9315, 1.4729]]))
30
33
array([[False, False, False]])
31
- >>> gray2binary (np.array([[26, 255, 14], [5, 147, 20], [1, 200, 0]]))
34
+ >>> gray_to_binary (np.array([[26, 255, 14], [5, 147, 20], [1, 200, 0]]))
32
35
array([[False, True, False],
33
36
[False, True, False],
34
37
[False, True, False]])
35
38
"""
36
39
return (gray > 127 ) & (gray <= 255 )
37
40
38
41
39
- def erosion (image : np .array , kernel : np .array ) -> np .array :
42
+ def erosion (image : np .ndarray , kernel : np .ndarray ) -> np .ndarray :
40
43
"""
41
44
Return eroded image
45
+
42
46
>>> erosion(np.array([[True, True, False]]), np.array([[0, 1, 0]]))
43
47
array([[False, False, False]])
44
48
>>> erosion(np.array([[True, False, False]]), np.array([[1, 1, 0]]))
@@ -62,14 +66,17 @@ def erosion(image: np.array, kernel: np.array) -> np.array:
62
66
return output
63
67
64
68
65
- # kernel to be applied
66
- structuring_element = np .array ([[0 , 1 , 0 ], [1 , 1 , 1 ], [0 , 1 , 0 ]])
67
-
68
69
if __name__ == "__main__" :
69
70
# read original image
70
- image = np .array (Image .open (r"..\image_data\lena.jpg" ))
71
+ lena_path = Path (__file__ ).resolve ().parent / "image_data" / "lena.jpg"
72
+ lena = np .array (Image .open (lena_path ))
73
+
74
+ # kernel to be applied
75
+ structuring_element = np .array ([[0 , 1 , 0 ], [1 , 1 , 1 ], [0 , 1 , 0 ]])
76
+
71
77
# Apply erosion operation to a binary image
72
- output = erosion (gray2binary (rgb2gray (image )), structuring_element )
78
+ output = erosion (gray_to_binary (rgb_to_gray (lena )), structuring_element )
79
+
73
80
# Save the output image
74
81
pil_img = Image .fromarray (output ).convert ("RGB" )
75
82
pil_img .save ("result_erosion.png" )
0 commit comments