From eb3d472e68df502c1e4002109ec4cd353520a56c Mon Sep 17 00:00:00 2001 From: mrvnmchm Date: Wed, 10 Oct 2018 23:21:54 -0400 Subject: [PATCH 1/9] Added Zeller's congruence algorithm --- Maths/ZellersCongruence.py | 45 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Maths/ZellersCongruence.py diff --git a/Maths/ZellersCongruence.py b/Maths/ZellersCongruence.py new file mode 100644 index 000000000000..1a665a6b67c7 --- /dev/null +++ b/Maths/ZellersCongruence.py @@ -0,0 +1,45 @@ +import argparse +"""Zellers Congruence Birthday Algorithm + Find out what day of the week you were born on, or any other date. +""" + +def zeller(date_input): + + weekdays = { + '0': 'Sunday', + '1': 'Monday', + '2': 'Tuesday', + '3': 'Wednesday', + '4': 'Thursday', + '5': 'Friday', + '6': 'Saturday' + } + + m = int(date_input[0] + date_input[1]) + d = int(date_input[3] + date_input[4]) + y = int(date_input[6] + date_input[7] + date_input[8] + date_input[9]) + + if m <= 2: + y = y - 1 + m = m + 12 + c = int(str(y)[:2]) + k = int(str(y)[2:]) + + t = int(2.6*m - 5.39) + u = int(c / 4) + v = int(k / 4) + x = d + k + z = t + u + v + x + w = z - (2 * c) + + f = round(w%7) + + for day in weekdays: + if f == int(day): + print("The date " + date_input + ", is a " + weekdays[day] + ".") + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Find out what day of the week you were born on Accepts birthday as a string in mm-dd-yyyy or mm/dd/yyyy format') + parser.add_argument('date_input', type=str, help='Date as a string (mm-dd-yyyy or mm/dd/yyyy)') + args = parser.parse_args() + zeller(args.date_input) \ No newline at end of file From e9083b84d3db517ff1ac482086821fcc5b9c0ff9 Mon Sep 17 00:00:00 2001 From: mrvnmchm Date: Wed, 10 Oct 2018 23:28:17 -0400 Subject: [PATCH 2/9] Update args help --- Maths/ZellersCongruence.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Maths/ZellersCongruence.py b/Maths/ZellersCongruence.py index 1a665a6b67c7..1f06635dd795 100644 --- a/Maths/ZellersCongruence.py +++ b/Maths/ZellersCongruence.py @@ -39,7 +39,7 @@ def zeller(date_input): print("The date " + date_input + ", is a " + weekdays[day] + ".") if __name__ == '__main__': - parser = argparse.ArgumentParser(description='Find out what day of the week you were born on Accepts birthday as a string in mm-dd-yyyy or mm/dd/yyyy format') + parser = argparse.ArgumentParser(description='Find out what day of the week you were born on, or any other date. Accepts birthday as a string in mm-dd-yyyy or mm/dd/yyyy format.') parser.add_argument('date_input', type=str, help='Date as a string (mm-dd-yyyy or mm/dd/yyyy)') args = parser.parse_args() zeller(args.date_input) \ No newline at end of file From efee7f95e24f8f6a1a59024d7b8b1770c7cb5784 Mon Sep 17 00:00:00 2001 From: "Marvin M. Michum" Date: Mon, 5 Aug 2019 15:07:03 -0400 Subject: [PATCH 3/9] change_contrast() doctest and pytest --- digital_image_processing/change_contrast.py | 8 ++++++++ digital_image_processing/test_digital_image_processing.py | 7 +++++++ 2 files changed, 15 insertions(+) create mode 100644 digital_image_processing/test_digital_image_processing.py diff --git a/digital_image_processing/change_contrast.py b/digital_image_processing/change_contrast.py index 76f1a3e1fcd8..01a7896c351c 100644 --- a/digital_image_processing/change_contrast.py +++ b/digital_image_processing/change_contrast.py @@ -6,6 +6,12 @@ python/black: True flake8 : True + +doctests: +>>> change_contrast() +Traceback (most recent call last): + ... +TypeError: change_contrast() missing 2 required positional arguments: 'img' and 'level' """ from PIL import Image @@ -28,6 +34,8 @@ def contrast(c: int) -> float: if __name__ == "__main__": + import doctest + doctest.testmod() # Load image with Image.open("image_data/lena.jpg") as img: # Change contrast to 170 diff --git a/digital_image_processing/test_digital_image_processing.py b/digital_image_processing/test_digital_image_processing.py new file mode 100644 index 000000000000..4fd2667b0907 --- /dev/null +++ b/digital_image_processing/test_digital_image_processing.py @@ -0,0 +1,7 @@ +from PIL import Image +import digital_image_processing.change_contrast as cc + +# Test: change_contrast() +def test_change_contrast(): + with Image.open("image_data/lena.jpg") as img: + assert str(cc.change_contrast(img, 110)).startswith(' Date: Mon, 5 Aug 2019 16:02:57 -0400 Subject: [PATCH 4/9] add some canny tests --- .../edge_detection/canny.py | 33 ++++++++++++++++++- .../test_digital_image_processing.py | 23 ++++++++++--- 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/digital_image_processing/edge_detection/canny.py b/digital_image_processing/edge_detection/canny.py index 7fde75a90a48..a85ec805a351 100644 --- a/digital_image_processing/edge_detection/canny.py +++ b/digital_image_processing/edge_detection/canny.py @@ -3,8 +3,39 @@ from digital_image_processing.filters.convolve import img_convolve from digital_image_processing.filters.sobel_filter import sobel_filter -PI = 180 +""" +doctests: +>>> gen_gaussian_kernel(9, sigma=1.4) +array([[3.23914970e-05, 1.93177651e-04, 6.91677937e-04, 1.48686709e-03, + 1.91894072e-03, 1.48686709e-03, 6.91677937e-04, 1.93177651e-04, + 3.23914970e-05], + [1.93177651e-04, 1.15208027e-03, 4.12505538e-03, 8.86743491e-03, + 1.14442522e-02, 8.86743491e-03, 4.12505538e-03, 1.15208027e-03, + 1.93177651e-04], + [6.91677937e-04, 4.12505538e-03, 1.47698752e-02, 3.17500967e-02, + 4.09764623e-02, 3.17500967e-02, 1.47698752e-02, 4.12505538e-03, + 6.91677937e-04], + [1.48686709e-03, 8.86743491e-03, 3.17500967e-02, 6.82516694e-02, + 8.80851478e-02, 6.82516694e-02, 3.17500967e-02, 8.86743491e-03, + 1.48686709e-03], + [1.91894072e-03, 1.14442522e-02, 4.09764623e-02, 8.80851478e-02, + 1.13682102e-01, 8.80851478e-02, 4.09764623e-02, 1.14442522e-02, + 1.91894072e-03], + [1.48686709e-03, 8.86743491e-03, 3.17500967e-02, 6.82516694e-02, + 8.80851478e-02, 6.82516694e-02, 3.17500967e-02, 8.86743491e-03, + 1.48686709e-03], + [6.91677937e-04, 4.12505538e-03, 1.47698752e-02, 3.17500967e-02, + 4.09764623e-02, 3.17500967e-02, 1.47698752e-02, 4.12505538e-03, + 6.91677937e-04], + [1.93177651e-04, 1.15208027e-03, 4.12505538e-03, 8.86743491e-03, + 1.14442522e-02, 8.86743491e-03, 4.12505538e-03, 1.15208027e-03, + 1.93177651e-04], + [3.23914970e-05, 1.93177651e-04, 6.91677937e-04, 1.48686709e-03, + 1.91894072e-03, 1.48686709e-03, 6.91677937e-04, 1.93177651e-04, + 3.23914970e-05]]) +""" +PI = 180 def gen_gaussian_kernel(k_size, sigma): center = k_size // 2 diff --git a/digital_image_processing/test_digital_image_processing.py b/digital_image_processing/test_digital_image_processing.py index 4fd2667b0907..b6cb9c318f5f 100644 --- a/digital_image_processing/test_digital_image_processing.py +++ b/digital_image_processing/test_digital_image_processing.py @@ -1,7 +1,22 @@ -from PIL import Image -import digital_image_processing.change_contrast as cc - +""" +PyTest's for Digital Image Processing +""" # Test: change_contrast() def test_change_contrast(): + from PIL import Image + import digital_image_processing.change_contrast as cc + # Image object with Image.open("image_data/lena.jpg") as img: - assert str(cc.change_contrast(img, 110)).startswith(' Date: Tue, 6 Aug 2019 11:16:41 -0400 Subject: [PATCH 5/9] add pytests for canny and start on filters --- digital_image_processing/change_contrast.py | 6 ---- .../edge_detection/canny.py | 32 ------------------- .../test_digital_image_processing.py | 25 ++++++++++++++- 3 files changed, 24 insertions(+), 39 deletions(-) diff --git a/digital_image_processing/change_contrast.py b/digital_image_processing/change_contrast.py index 01a7896c351c..2a3bf5b06a86 100644 --- a/digital_image_processing/change_contrast.py +++ b/digital_image_processing/change_contrast.py @@ -6,12 +6,6 @@ python/black: True flake8 : True - -doctests: ->>> change_contrast() -Traceback (most recent call last): - ... -TypeError: change_contrast() missing 2 required positional arguments: 'img' and 'level' """ from PIL import Image diff --git a/digital_image_processing/edge_detection/canny.py b/digital_image_processing/edge_detection/canny.py index a85ec805a351..bddd8fe7e8cd 100644 --- a/digital_image_processing/edge_detection/canny.py +++ b/digital_image_processing/edge_detection/canny.py @@ -3,38 +3,6 @@ from digital_image_processing.filters.convolve import img_convolve from digital_image_processing.filters.sobel_filter import sobel_filter -""" -doctests: ->>> gen_gaussian_kernel(9, sigma=1.4) -array([[3.23914970e-05, 1.93177651e-04, 6.91677937e-04, 1.48686709e-03, - 1.91894072e-03, 1.48686709e-03, 6.91677937e-04, 1.93177651e-04, - 3.23914970e-05], - [1.93177651e-04, 1.15208027e-03, 4.12505538e-03, 8.86743491e-03, - 1.14442522e-02, 8.86743491e-03, 4.12505538e-03, 1.15208027e-03, - 1.93177651e-04], - [6.91677937e-04, 4.12505538e-03, 1.47698752e-02, 3.17500967e-02, - 4.09764623e-02, 3.17500967e-02, 1.47698752e-02, 4.12505538e-03, - 6.91677937e-04], - [1.48686709e-03, 8.86743491e-03, 3.17500967e-02, 6.82516694e-02, - 8.80851478e-02, 6.82516694e-02, 3.17500967e-02, 8.86743491e-03, - 1.48686709e-03], - [1.91894072e-03, 1.14442522e-02, 4.09764623e-02, 8.80851478e-02, - 1.13682102e-01, 8.80851478e-02, 4.09764623e-02, 1.14442522e-02, - 1.91894072e-03], - [1.48686709e-03, 8.86743491e-03, 3.17500967e-02, 6.82516694e-02, - 8.80851478e-02, 6.82516694e-02, 3.17500967e-02, 8.86743491e-03, - 1.48686709e-03], - [6.91677937e-04, 4.12505538e-03, 1.47698752e-02, 3.17500967e-02, - 4.09764623e-02, 3.17500967e-02, 1.47698752e-02, 4.12505538e-03, - 6.91677937e-04], - [1.93177651e-04, 1.15208027e-03, 4.12505538e-03, 8.86743491e-03, - 1.14442522e-02, 8.86743491e-03, 4.12505538e-03, 1.15208027e-03, - 1.93177651e-04], - [3.23914970e-05, 1.93177651e-04, 6.91677937e-04, 1.48686709e-03, - 1.91894072e-03, 1.48686709e-03, 6.91677937e-04, 1.93177651e-04, - 3.23914970e-05]]) -""" - PI = 180 def gen_gaussian_kernel(k_size, sigma): diff --git a/digital_image_processing/test_digital_image_processing.py b/digital_image_processing/test_digital_image_processing.py index b6cb9c318f5f..ddf96d4b6ac8 100644 --- a/digital_image_processing/test_digital_image_processing.py +++ b/digital_image_processing/test_digital_image_processing.py @@ -6,7 +6,7 @@ def test_change_contrast(): from PIL import Image import digital_image_processing.change_contrast as cc # Image object - with Image.open("image_data/lena.jpg") as img: + with Image.open("digital_image_processing/image_data/lena.jpg") as img: # Work around assertion for response assert str(cc.change_contrast(img, 110)).startswith(' Date: Wed, 7 Aug 2019 00:21:33 -0400 Subject: [PATCH 6/9] add pytests to digital_image_processing --- .../filters/median_filter.py | 2 +- .../test_digital_image_processing.py | 62 +++++++++++++------ 2 files changed, 43 insertions(+), 21 deletions(-) diff --git a/digital_image_processing/filters/median_filter.py b/digital_image_processing/filters/median_filter.py index ed20b1ab7f78..4b21b96b080b 100644 --- a/digital_image_processing/filters/median_filter.py +++ b/digital_image_processing/filters/median_filter.py @@ -15,7 +15,7 @@ def median_filter(gray_img, mask=3): # set image borders bd = int(mask / 2) # copy image size - median_img = zeros_like(gray) + median_img = zeros_like(gray_img) for i in range(bd, gray_img.shape[0] - bd): for j in range(bd, gray_img.shape[1] - bd): # get mask according with mask diff --git a/digital_image_processing/test_digital_image_processing.py b/digital_image_processing/test_digital_image_processing.py index ddf96d4b6ac8..f62292f892e3 100644 --- a/digital_image_processing/test_digital_image_processing.py +++ b/digital_image_processing/test_digital_image_processing.py @@ -1,10 +1,30 @@ """ PyTest's for Digital Image Processing """ + +# add change_contrast +from PIL import Image +import digital_image_processing.change_contrast as cc +# add canny +import digital_image_processing.edge_detection.canny as canny +import cv2 +# add gen_gaussian +from cv2 import imread, cvtColor, COLOR_BGR2GRAY, imshow, waitKey +from numpy import array, pi, mgrid, exp, square, zeros, ravel, dot, uint8 +import digital_image_processing.filters.gaussian_filter as gg +# add convolve +import digital_image_processing.filters.convolve as conv +# add median +import digital_image_processing.filters.median_filter as med +# add sobel_filter +import digital_image_processing.filters.sobel_filter as sob +# add img +img = imread(r'digital_image_processing/image_data/lena.jpg') +# add gray +gray = cvtColor(img, COLOR_BGR2GRAY) + # Test: change_contrast() def test_change_contrast(): - from PIL import Image - import digital_image_processing.change_contrast as cc # Image object with Image.open("digital_image_processing/image_data/lena.jpg") as img: # Work around assertion for response @@ -12,34 +32,36 @@ def test_change_contrast(): # Test: canny.gen_gaussian_kernel() def test_gen_gaussian_kernel(): - # import canny - import digital_image_processing.edge_detection.canny as cc # get ambiguous array - resp = cc.gen_gaussian_kernel(9, sigma=1.4) + resp = canny.gen_gaussian_kernel(9, sigma=1.4) # Assert ambiguous array assert resp.all() # Test: canny() def test_canny(): - # import reqs - import cv2 - import digital_image_processing.edge_detection.canny as cc # read image in gray - img = cv2.imread('digital_image_processing/image_data/lena.jpg', 0) + canny_img = imread('digital_image_processing/image_data/lena.jpg', 0) # assert ambiguos array for all == True - assert img.all() + assert canny_img.all() # Get canny array - canny_array = cc.canny(img) + canny_array = canny.canny(canny_img) # assert canny array for at least one True assert canny_array.any() -""" # Test: filters/gaussian_filter.py -def gen_gaussian_kernel_filter(): - # imports - from cv2 import imread, cvtColor, COLOR_BGR2GRAY, imshow, waitKey - from numpy import pi, mgrid, exp, square, zeros, ravel, dot, uint8 - # import gaussian filter file - import digital_image_processing.filters.gen_gaussian_kernel as gg - -""" +def test_gen_gaussian_kernel_filter(): + # Filter 5x5 + assert gg.gaussian_filter(gray, 5, sigma=0.9).all() + +def test_convolve_filter(): + # laplace diagonals + Laplace = array([[0.25, 0.5, 0.25], [0.5, -3, 0.5], [0.25, 0.5, 0.25]]) + res = conv.img_convolve(gray, Laplace).astype(uint8) + assert res.any() + +def test_median_filter(): + assert med.median_filter(gray, 3).any() + +def test_sobel_filter(): + grad, theta = sob.sobel_filter(gray) + assert grad.any() and theta.any() \ No newline at end of file From 602761bf3ef71cef4fb525d7c90514b24b8d6538 Mon Sep 17 00:00:00 2001 From: "Marvin M. Michum" Date: Wed, 7 Aug 2019 09:46:47 -0400 Subject: [PATCH 7/9] remove doctest hook and unnecessary comments --- digital_image_processing/change_contrast.py | 2 -- .../test_digital_image_processing.py | 15 ++------------- 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/digital_image_processing/change_contrast.py b/digital_image_processing/change_contrast.py index 2a3bf5b06a86..76f1a3e1fcd8 100644 --- a/digital_image_processing/change_contrast.py +++ b/digital_image_processing/change_contrast.py @@ -28,8 +28,6 @@ def contrast(c: int) -> float: if __name__ == "__main__": - import doctest - doctest.testmod() # Load image with Image.open("image_data/lena.jpg") as img: # Change contrast to 170 diff --git a/digital_image_processing/test_digital_image_processing.py b/digital_image_processing/test_digital_image_processing.py index f62292f892e3..c8b57a87ed11 100644 --- a/digital_image_processing/test_digital_image_processing.py +++ b/digital_image_processing/test_digital_image_processing.py @@ -2,55 +2,44 @@ PyTest's for Digital Image Processing """ -# add change_contrast +# add modules from PIL import Image import digital_image_processing.change_contrast as cc -# add canny import digital_image_processing.edge_detection.canny as canny import cv2 -# add gen_gaussian from cv2 import imread, cvtColor, COLOR_BGR2GRAY, imshow, waitKey from numpy import array, pi, mgrid, exp, square, zeros, ravel, dot, uint8 import digital_image_processing.filters.gaussian_filter as gg -# add convolve import digital_image_processing.filters.convolve as conv -# add median import digital_image_processing.filters.median_filter as med -# add sobel_filter import digital_image_processing.filters.sobel_filter as sob -# add img +# add vars img = imread(r'digital_image_processing/image_data/lena.jpg') -# add gray gray = cvtColor(img, COLOR_BGR2GRAY) # Test: change_contrast() def test_change_contrast(): - # Image object with Image.open("digital_image_processing/image_data/lena.jpg") as img: # Work around assertion for response assert str(cc.change_contrast(img, 110)).startswith(' Date: Wed, 7 Aug 2019 13:21:06 -0400 Subject: [PATCH 8/9] removed unused import cv2 --- digital_image_processing/test_digital_image_processing.py | 1 - 1 file changed, 1 deletion(-) diff --git a/digital_image_processing/test_digital_image_processing.py b/digital_image_processing/test_digital_image_processing.py index c8b57a87ed11..292d9be90c2c 100644 --- a/digital_image_processing/test_digital_image_processing.py +++ b/digital_image_processing/test_digital_image_processing.py @@ -6,7 +6,6 @@ from PIL import Image import digital_image_processing.change_contrast as cc import digital_image_processing.edge_detection.canny as canny -import cv2 from cv2 import imread, cvtColor, COLOR_BGR2GRAY, imshow, waitKey from numpy import array, pi, mgrid, exp, square, zeros, ravel, dot, uint8 import digital_image_processing.filters.gaussian_filter as gg From b98dbdc331fc6917a37f77c6729499b6e1316384 Mon Sep 17 00:00:00 2001 From: "Marvin M. Michum" Date: Wed, 7 Aug 2019 20:31:51 -0400 Subject: [PATCH 9/9] remove unused imports 2.0 --- .../test_digital_image_processing.py | 37 +++++++++++-------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/digital_image_processing/test_digital_image_processing.py b/digital_image_processing/test_digital_image_processing.py index 292d9be90c2c..0ff9e3333ca8 100644 --- a/digital_image_processing/test_digital_image_processing.py +++ b/digital_image_processing/test_digital_image_processing.py @@ -2,54 +2,61 @@ PyTest's for Digital Image Processing """ -# add modules -from PIL import Image -import digital_image_processing.change_contrast as cc import digital_image_processing.edge_detection.canny as canny -from cv2 import imread, cvtColor, COLOR_BGR2GRAY, imshow, waitKey -from numpy import array, pi, mgrid, exp, square, zeros, ravel, dot, uint8 import digital_image_processing.filters.gaussian_filter as gg -import digital_image_processing.filters.convolve as conv import digital_image_processing.filters.median_filter as med import digital_image_processing.filters.sobel_filter as sob -# add vars -img = imread(r'digital_image_processing/image_data/lena.jpg') +import digital_image_processing.filters.convolve as conv +import digital_image_processing.change_contrast as cc +from cv2 import imread, cvtColor, COLOR_BGR2GRAY +from numpy import array, uint8 +from PIL import Image + +img = imread(r"digital_image_processing/image_data/lena.jpg") gray = cvtColor(img, COLOR_BGR2GRAY) # Test: change_contrast() def test_change_contrast(): with Image.open("digital_image_processing/image_data/lena.jpg") as img: # Work around assertion for response - assert str(cc.change_contrast(img, 110)).startswith('