So sánh điểm ảnh computer vision

Ở bài 1 chúng ta đã được tìm hiểu về các nguyên lý (principle) và tầng xử lý (processing level) trong xử lý ảnh, trong bài học hôm nay chúng ta sẽ đi vào xử lý đầu tiên đó là nâng cao chất lượng ảnh.

Trong thị giác máy tính (computer vision) chất lượng của bức ảnh được đánh giá thông qua độ nổi bật của các đặc trưng (pattern) của các bức ảnh. Các đặc trưng (pattern) này là yếu tố chính ảnh hưởng đến việc dự đoán của máy tính. Để nâng cao chất lượng ảnh có 2 miền xử lý đó là:

  • Miền không gian (spatial domain): trực tiếp xử lý trên các pixel của ảnh.
  • Miền tần số (frequency domain): xử lý bằng cách chỉnh sửa chuyển đổi phổ (spectral transform) của ảnh.

Để nâng cao chất lượng ảnh các xử lý không nhất thiết phải bó buộc trong một miền xử lý mà có thể kết hợp cả 2. Trong bài học này chúng ta sẽ cùng tìm hiểu về các xử lý ở miền không gian (spatial domain) trên ảnh xám (gray image) nhé.

Xử lý điểm (point processing)

Xử lý điểm là xử lý mà được áp dụng vào mỗi pixel trên ảnh mà không cần quan tâm đến các pixel xung quanh (neighborhood pixel).

Biến đổi sử dụng phép tính số học

Biểu thức toán học của xử lý này như sau:

$s = T(r)$

Trong đó $r$ là mức độ xám (gray level) ở một pixel trên ảnh đầu vào, $s$ là mức độ xám (gray level) ở một pixel trên ảnh đầu ra, $T$ là hàm chuyển đổi (transformation function). Chúng ta có thể sử dụng các phép tính số học cơ bản như cộng, trừ, nhân, chia làm hàm chuyển đổi. Ví dụ chúng ta có bức hình như sau

1 2 3 4 5 6 7 8 9

import cv2 from google.colab.patches import cv2_imshow img = cv2.imread('/content/lena.png')

Convert ảnh sang ảnh xám

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

In ra shape của image

print(img.shape) cv2_imshow(img)

So sánh điểm ảnh computer vision

Chúng ta sẽ lần lượt thay đổi bức ảnh này với các hàm chuyển đổi khác nhau.

1 2 3

Giảm một nửa mức độ xám

img_div = img / 2 cv2_imshow(img_div)

So sánh điểm ảnh computer vision

1 2 3

Tăng mức độ xám

img_mul = img * 1.7 cv2_imshow(img_mul)

So sánh điểm ảnh computer vision

1 2 3

Tăng mức độ xám sử dụng biểu thức số học

img_div_plus = img // 2 + 50 cv2_imshow(img_div_plus)

So sánh điểm ảnh computer vision

Bên cạnh đó, chúng ta có thể áp dụng xử lý loại trừ hình ảnh (image substraction) để làm rõ hơn sự khác nhau giữa hai bức ảnh. Giả sử chúng ta có 2 bức ảnh và cần tìm sự khác nhau giữa chúng, chúng ta có thể xử lý như sau.

1 2 3 4 5 6 7 8 9 10

Ảnh 1

img1 = cv2.imread('/content/first_image.png')

Convert sang ảnh xám

img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)

Ảnh 2

img2 = cv2.imread('/content/second_image.png')

Convert sang ảnh xám

img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY) cv2_imshow(img1) cv2_imshow(img2)

So sánh điểm ảnh computer vision

So sánh điểm ảnh computer vision

import cv2 from google.colab.patches import cv2_imshow img = cv2.imread('/content/lena.png')

Convert ảnh sang ảnh xám

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

In ra shape của image

print(img.shape) cv2_imshow(img)

0

import cv2 from google.colab.patches import cv2_imshow img = cv2.imread('/content/lena.png')

Convert ảnh sang ảnh xám

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

In ra shape của image

print(img.shape) cv2_imshow(img)

1

So sánh điểm ảnh computer vision

Giờ thì đã rất dễ dàng để nhận ra các điểm khác biệt đúng ko 😎

Biến đổi nghịch đảo hình ảnh (negative tranformation)

Trong trường hợp ảnh của chúng ta phần nền đen của ảnh là chiếm đa số trong bức ảnh, chúng ta có thể thực hiện biến đổi nghịch đảo (negative tranformation) hình ảnh để làm nổi bật hơn các chi tiết màu trắng hoặc xám trong bức ảnh. Biểu thức toán học của xử lý này như sau:

$s= L - 1 -r$

Trong đó $L$ là thang độ xám hay số mức độ xám của bức ảnh. $L$ là lũy thừa của 2 và số bit được sử dụng để thể hiện mức độ xám (gray level). Số bit này nằm trong quá trình lấy mẫu (sampling) bức ảnh khi chuyển đổi ảnh sang ảnh kỹ thuật số (digital image). Thông thường số bit được sử dụng là 8, tương ứng với 256 mức độ xám.

import cv2 from google.colab.patches import cv2_imshow img = cv2.imread('/content/lena.png')

Convert ảnh sang ảnh xám

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

In ra shape của image

print(img.shape) cv2_imshow(img)

2

import cv2 from google.colab.patches import cv2_imshow img = cv2.imread('/content/lena.png')

Convert ảnh sang ảnh xám

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

In ra shape của image

print(img.shape) cv2_imshow(img)

3

So sánh điểm ảnh computer vision

1 2 3

import cv2 from google.colab.patches import cv2_imshow img = cv2.imread('/content/lena.png')

Convert ảnh sang ảnh xám

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

In ra shape của image

print(img.shape) cv2_imshow(img)

5

So sánh điểm ảnh computer vision

Biến đổi lôgarit và lũy thữa

Ngoài việc sử dụng các phép tính số học cơ bản, chúng ta có thể biến đổi ảnh sử dụng hàm lôgarit và lũy thừa.

  • Biến đổi lôgarit

$s= c\:log(1 + r)$

$c= \frac{(L - 1)}{log(1 + max(img))} $

Trong đó $c$ là một hằng số tỷ lệ theo thang độ xám. Biến đổi này đều giúp mở rộng vùng giá trị của các pixel tối và thu gọn giá trị của các pixel sáng.

  • Biển đổi lũy thừa

$s = c\:r^{\gamma }$

Trong đó $c$ và $\gamma$ là một hằng số dương. Do sự xuất hiện của hằng số $\gamma$, biến đổi lũy thừa còn được gọi một cái tên khác là biến đổi gamma. Nhìn vào đường biến đổi của mức độ xám (gray level) ở biểu đồ ở dưới đây chúng ta có thể thấy, khi $\gamma$ >= 1 tương ứng với đường cong n th power, biến đổi gamma có xu hướng làm nhỏ đi mức độ xám, dẫn đến bức ảnh sẽ tối đi. Ở chiều ngược lại, khi $\gamma$ < 1 ứng với đường đường con n th root, biến đổi gamma làm tăng mức độ xám, dẫn tới bức ảnh sáng lên.

So sánh điểm ảnh computer vision

import cv2 from google.colab.patches import cv2_imshow img = cv2.imread('/content/lena.png')

Convert ảnh sang ảnh xám

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

In ra shape của image

print(img.shape) cv2_imshow(img)

2

import cv2 from google.colab.patches import cv2_imshow img = cv2.imread('/content/lena.png')

Convert ảnh sang ảnh xám

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

In ra shape của image

print(img.shape) cv2_imshow(img)

7

So sánh điểm ảnh computer vision

import cv2 from google.colab.patches import cv2_imshow img = cv2.imread('/content/lena.png')

Convert ảnh sang ảnh xám

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

In ra shape của image

print(img.shape) cv2_imshow(img)

2

import cv2 from google.colab.patches import cv2_imshow img = cv2.imread('/content/lena.png')

Convert ảnh sang ảnh xám

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

In ra shape của image

print(img.shape) cv2_imshow(img)

9

So sánh điểm ảnh computer vision

Kết

Như vậy trong bài học số 2 này chúng ta đã làm quen với các xử lý điểm (point processing) giúp nâng cao chất lượng ảnh. Theo bạn thì bức ảnh nào của Lena đã chỉnh sửa tốt nhất ? 😄 Trong bài học số tiếp theo chúng ta sẽ tiếp tìm hiểu về xử lý giúp nâng cao chất lượng ảnh nhưng sử dụng các pixel xung quanh (neighborhood pixel) trong quá trình thực hiện.