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