Biến đổi âm bản trong xử lý ảnh python

Check these out next

Xử lý ảnh theo phương pháp âm bản, nhị phân, hàm số mũ

Chương trình Xử lý ảnh theo phương pháp âm bản, nhị phân, hàm số mũ, được viết bằng ngôn ngữ java

Chương trình Xử lý ảnh theo phương pháp âm bản, nhị phân, hàm số mũ, được viết bằng ngôn ngữ java

Môi trường làm việc với OpenCV

  • Linux [bài viết sử dụng Ubuntu 16.04]
  • OpenCV [bài viết sử dụng OpenCV 3.4.1]
  • Python [bài viết sử dụng Python 3.5.5]
  • Ảnh mẫu để xử lý [bài viết sử dụng ảnh img_3.jpg]

img_3.jpg

Bạn có thể download ảnh mẫu về.

Thiết kế hàm biến đổi mức sáng

Thông thường người ta cho điều chỉnh mức sáng các pixel trong ảnh theo công thức sau:

\[g[x,y] = a*f[x,y] + b\].

  • a, b: hằng số do mình chọn.
  • f[x,y]: mức sáng của pixel trong ảnh tại điểm có tọa độ [x,y].
  • g[x,y]: mức sáng của pixel trong ảnh tại điểm có toạ độ [x,y] sau khi biến đổi.

Nói cách khác, \[f\] là ảnh ban đầu, còn \[g\] là ảnh sau biến đổi!

  • Ảnh xám thì ta ám dụng công thức trên cho 1 kênh ảnh [vì ảnh xám chỉ có 1 kênh]
  • Đối với ảnh màu ta cũng sẽ áp dụng tương tự trên đồng lọat 3 kênh Red, Green, Blue

Ví dụ minh họa: Cho ảnh F [ma trận] 3x3 có các mức sáng [giá trị] sau:

35 6 1

46 24 178

49 65 42

Áp dụng hàm biến đổi \[g[x,y] = 5*f[x,y] + 20\], ta được ảnh G như sau:

195 50 25

250 140 910

265 345 230

Vì mức sáng trong ảnh chỉ nằm trong đoạn [0, 255] vì vậy ảnh G sẽ là:

195 50 25

250 140 255

255 255 230

Ok, lý thuyết vậy đủ rồi. Thực hành với OpenCV thôi!

Chỉnh mức sáng bằng OpenCV code Python

opencv_brightness.py

import sys
import cv2
import numpy as np

def change_brightness[img, alpha, beta]:
    img_new = np.asarray[alpha*img + beta, dtype=int]   # cast pixel values to int
    img_new[img_new>255] = 255
    img_new[img_new

Chủ Đề