From e09aa90e0e388d4c42e38381961bc3fa1771cff3 Mon Sep 17 00:00:00 2001 From: Nguyễn Gia Phong Date: Wed, 8 Jul 2020 14:11:07 +0700 Subject: [usth/ICT2.{5,12}] Process images and base data --- usth/ICT2.12/labwork/1 | 55 +++++++++++++++++++++++++++++++++++++ usth/ICT2.12/labwork/1.pdf | Bin 0 -> 1376916 bytes usth/ICT2.12/labwork/2 | 54 ++++++++++++++++++++++++++++++++++++ usth/ICT2.12/labwork/2.pdf | Bin 0 -> 1348500 bytes usth/ICT2.12/labwork/dino-gang.jpg | Bin 0 -> 53971 bytes 5 files changed, 109 insertions(+) create mode 100755 usth/ICT2.12/labwork/1 create mode 100644 usth/ICT2.12/labwork/1.pdf create mode 100755 usth/ICT2.12/labwork/2 create mode 100644 usth/ICT2.12/labwork/2.pdf create mode 100644 usth/ICT2.12/labwork/dino-gang.jpg (limited to 'usth/ICT2.12/labwork') diff --git a/usth/ICT2.12/labwork/1 b/usth/ICT2.12/labwork/1 new file mode 100755 index 0000000..2590192 --- /dev/null +++ b/usth/ICT2.12/labwork/1 @@ -0,0 +1,55 @@ +#!/usr/bin/env python3 +from cv2 import ( + THRESH_BINARY, ADAPTIVE_THRESH_MEAN_C, + adaptiveThreshold as adaptive_threshold, calcHist as calc_hist, blur, + equalizeHist as equalize_hist, GaussianBlur as gaussian_blur, + imread, imshow, Laplacian as laplacian, medianBlur as median_blur, + resize, Sobel as sobel, threshold, waitKey as wait_key) +from numpy import uint8 + +FILENAME = 'dino-gang.jpg' +GREYSCALE_COEFF = 0.2126, 0.7152, 0.0722 +THRESHOLD, WHITE = 128, 255 +BLUR_KSIZE = 6, 9 + + +def disp(image, name): + """Display the given image.""" + imshow(name, image.astype(uint8)) + wait_key() + + +# Exercise 1 +image = imread(FILENAME) +disp(image, 'original') + +# Exercise 2 +disp(resize(image, (512, 512)), 'square') + +# Exercise 3 +# I'm going to ignore about cv2.IMREAD_GRAYSCALE +grey_image = uint8(image.dot(GREYSCALE_COEFF)) +disp(grey_image, 'grey') + +# Exercise 4 +a, b = 1/2, 1/3 +disp(image*a+b, 'brightness adjusted') + +# Exercise 5 +disp(threshold(grey_image, THRESHOLD, WHITE, THRESH_BINARY)[-1], + 'binary threshold') +disp(adaptive_threshold(grey_image, WHITE, ADAPTIVE_THRESH_MEAN_C, + THRESH_BINARY, 25, 12), 'adaptive threshold') + +# Exercise 6 +hist = calc_hist([grey_image], [0], None, [256], [0, 256]) +disp(equalize_hist(grey_image), 'equalized') + +# Exercise 7 +disp(blur(image, BLUR_KSIZE), 'blur') +disp(gaussian_blur(image, (0, 0), 5), 'Gaussian blur') +disp(median_blur(image, 7), 'median blur') + +# Exercise 8 +disp(laplacian(image, 2), 'Laplacian') +disp(sobel(image, 2, 1, 1), 'Sobel') diff --git a/usth/ICT2.12/labwork/1.pdf b/usth/ICT2.12/labwork/1.pdf new file mode 100644 index 0000000..b7286d0 Binary files /dev/null and b/usth/ICT2.12/labwork/1.pdf differ diff --git a/usth/ICT2.12/labwork/2 b/usth/ICT2.12/labwork/2 new file mode 100755 index 0000000..af253ed --- /dev/null +++ b/usth/ICT2.12/labwork/2 @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +from cv2 import ( + COLOR_BGR2GRAY, KMEANS_RANDOM_CENTERS, THRESH_BINARY, TERM_CRITERIA_EPS, + TERM_CRITERIA_MAX_ITER, Canny as canny, cvtColor as cvt_color, + HoughLines as hough_lines, imread, imshow, inRange as in_range, kmeans, + Laplacian as laplacian, line, Sobel as sobel, threshold, + waitKey as wait_key) +from numpy import cos, float32, pi, sin, uint8 + +FILENAME = 'dino-gang.jpg' +THRESHOLD, WHITE = 128, 255 +CANNY_THRESH = 69 + + +def disp(image, name): + """Display the given image.""" + imshow(name, image.astype(uint8)) + wait_key() + + +image = imread(FILENAME) +disp(image, 'original') + +# Exercise 1 +# Requiring all three channels to be greater than THRESHOLD +# using in_range produces a blacker result (fewer white points). +# The information inferred by human (me) is less clear. +grey = cvt_color(image, COLOR_BGR2GRAY) +disp(threshold(grey, THRESHOLD, WHITE, THRESH_BINARY)[-1], 'threshold') +disp(in_range(image, (THRESHOLD,)*3, (WHITE,)*3), 'in range') + +# Exercise 2 +disp(laplacian(image, 2), 'Laplacian') +disp(sobel(image, 2, 1, 1), 'Sobel') +# Canny produces a lot visible edge comparing to Laplacian and Sobel. +edges = canny(image, CANNY_THRESH, CANNY_THRESH*2) +disp(edges, 'canny') + +# Exercise 3 +pixels = float32(image.reshape((-1, 3))) +criteria = TERM_CRITERIA_EPS|TERM_CRITERIA_MAX_ITER, 10, 1.0 +ret, labels, centers = kmeans(pixels, 3, None, criteria, + 10, KMEANS_RANDOM_CENTERS) +# Compared to global threshold, this has colors. +# I am unsure how this relate to adaptive threshold though. +disp(centers[labels.flatten()].reshape(image.shape), 'seg') + +# Exercise 4 +for ((rho, theta),) in hough_lines(edges, 1, pi/180, THRESHOLD): + a, b = cos(theta), sin(theta) + x, y = a*rho, b*rho + line(image, (int(x-b*1000), int(y+a*1000)), (int(x+b*1000), int(y-a*1000)), + (0, 0, 255), 2) +disp(image, 'hough') diff --git a/usth/ICT2.12/labwork/2.pdf b/usth/ICT2.12/labwork/2.pdf new file mode 100644 index 0000000..2471ca1 Binary files /dev/null and b/usth/ICT2.12/labwork/2.pdf differ diff --git a/usth/ICT2.12/labwork/dino-gang.jpg b/usth/ICT2.12/labwork/dino-gang.jpg new file mode 100644 index 0000000..1d8001a Binary files /dev/null and b/usth/ICT2.12/labwork/dino-gang.jpg differ -- cgit 1.4.1