1+ from pathlib import Path
2+
13import numpy as np
24from PIL import Image
35
46
5- def rgb2gray (rgb : np .array ) -> np .array :
7+ def rgb_to_gray (rgb : np .ndarray ) -> np .ndarray :
68 """
79 Return gray image from rgb image
8- >>> rgb2gray(np.array([[[127, 255, 0]]]))
10+
11+ >>> rgb_to_gray(np.array([[[127, 255, 0]]]))
912 array([[187.6453]])
10- >>> rgb2gray (np.array([[[0, 0, 0]]]))
13+ >>> rgb_to_gray (np.array([[[0, 0, 0]]]))
1114 array([[0.]])
12- >>> rgb2gray (np.array([[[2, 4, 1]]]))
15+ >>> rgb_to_gray (np.array([[[2, 4, 1]]]))
1316 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]]]))
1518 array([[159.0524, 90.0635, 117.6989]])
1619 """
1720 r , g , b = rgb [:, :, 0 ], rgb [:, :, 1 ], rgb [:, :, 2 ]
1821 return 0.2989 * r + 0.5870 * g + 0.1140 * b
1922
2023
21- def gray2binary (gray : np .array ) -> np .array :
24+ def gray_to_binary (gray : np .ndarray ) -> np .ndarray :
2225 """
2326 Return binary image from gray image
2427
25- >>> gray2binary (np.array([[127, 255, 0]]))
28+ >>> gray_to_binary (np.array([[127, 255, 0]]))
2629 array([[False, True, False]])
27- >>> gray2binary (np.array([[0]]))
30+ >>> gray_to_binary (np.array([[0]]))
2831 array([[False]])
29- >>> gray2binary (np.array([[26.2409, 4.9315, 1.4729]]))
32+ >>> gray_to_binary (np.array([[26.2409, 4.9315, 1.4729]]))
3033 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]]))
3235 array([[False, True, False],
3336 [False, True, False],
3437 [False, True, False]])
3538 """
3639 return (gray > 127 ) & (gray <= 255 )
3740
3841
39- def erosion (image : np .array , kernel : np .array ) -> np .array :
42+ def erosion (image : np .ndarray , kernel : np .ndarray ) -> np .ndarray :
4043 """
4144 Return eroded image
45+
4246 >>> erosion(np.array([[True, True, False]]), np.array([[0, 1, 0]]))
4347 array([[False, False, False]])
4448 >>> 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:
6266 return output
6367
6468
65- # kernel to be applied
66- structuring_element = np .array ([[0 , 1 , 0 ], [1 , 1 , 1 ], [0 , 1 , 0 ]])
67-
6869if __name__ == "__main__" :
6970 # 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+
7177 # 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+
7380 # Save the output image
7481 pil_img = Image .fromarray (output ).convert ("RGB" )
7582 pil_img .save ("result_erosion.png" )
0 commit comments