Tuần 2: Phép toán với điểm – Điểu chỉnh độ tương phản

Tram Ho

Ôn lại bài tuần 1

Ta sẽ nhắc lại các kiến thức đã học ở bài tuần 1:

  • Ảnh số là một hàm với mảng 2 chiều
    f(x,y)f(x,y)

  • Có nhiều loại ảnh số: chụp dùng cảm ứng ánh sáng, hoặc các loại sóng, hoặc hàm tùy chỉnh
  • Và chúng ta cũng biết cài đặt thư viện: OpenCV, Python, Jupyter Notebook

Số hoá ảnh

  • Định nghĩa: số hóa ảnh là biến đổi một ảnh (hay một hàm) liên tục trong không gian cũng như theo giá trị thành dạng số rời rạc.
  • Có 2 bước:
    • Lấy mẫu (sampling): đo giá trị trong các khoảng không gian
    • Lượng tử hóa (quantization): ánh xạ cường độ (hoặc giá trị) đo được thành một số hữu hạn các mức rời rạc
      Để cho trực quan hơn, ta có thể xem ví dụ dưới đây:

Hình 2.16 a là hình ảnh một đối tượng ảnh liên tục mà ta muốn chuyển đổi sang dạng ảnh số gọi là ảnh gốc.

Hình 2.16 b thể hiện các giá trị độ lớn của ảnh gốc dọc theo đoạn thẳng AB. Để lấy mẫu hàm này, ta chia đoạnh AB thành các khoảng bằng nhau như hình 2.16 c. Trong đó các vị trí lấy mẫu được đánh dấu bởi một đoạn thẳng nhỏ ở phía dưới hình và giá trị của mỗi mẫu được thể hiện là hình tròn nhỏ trên hàm. Tập hợp các vị trí rời rạc đó cho ta một hàm đã được lấy mẫu.

Hình bên trái của 2.16 c là cho biết miền giá trị của cường độ chia thành 8 khoảng rời rạc. Lượng tử hóa bằng các thực hiện gaasnmooxi giá trị cường độ vào 1 trong 8 khoảng rời rạc đó.

Sau khi thực hiện lấy mẫu và lượng tử hóa, ta có kết quả như sau:

Mức độ lượng tử hóa: Số lượng mức xám được yêu cầu trên một bức ảnh số tương ứng với số lượng bits trên mỗi pixel

Ảnh số thường được lượng tử hoá thành 256 mức xám

Các biến đổi trên ảnh

Nhận biết bước xám (Tonal level perception)

Nếu mức xám dùng 8 bit nó sẽ là dải liên tục.

Biến đổi gamma

vout=vinγv_{out} = v_{in}^gamma

vinv_{in}

voutv_{out}

Ta sẽ có các ví dụ sau:

Cho dải màu xám 16 mức, với gamma = 1 thì nó sẽ giữ nguyên như sau:

Link code : here

Với gamma > 1, ta thấy nếu giá trị đầu vào là tối (thấp) thì đẩu ra là tối hơn, ví dụ đầu vào là giá trị 17 thì đầu ra là giá trị 0:

Link code: here


Với gamma < 1, các giá trị đầu vào là thấp thì đẩu ra sáng hơn, ví dụ đầu vào là 17 đầu ra là giá trị 74:

Link code: here

Sử dụng gamma để điều chỉnh độ tương phản

1. Độ tương phản thấp (Low exposure)

Ví dụ ảnh vào là một ảnh tối như sau:

Thì ta cần chỉnh độ sáng lên thì cần gamma < 1:

Link: here

Ta thử với 1 số giá trị. Với gamma = 0.45

Kết quả sẽ như sau, nhìn trông tốt hơn trước 😀:

Nếu như gamma quá nhỏ thì sao?

Link code: here

Kết quả thì nó quá sáng:

Ta thử đo thời gian với hàm adjust_image_gamma:

Nó rất tốn thời gian, có cách nào nhanh hơn không ?. Thật ra là có 😃. Nó sẽ như sau:

Link code: here

Ý tưởng ở đây là dùng bảng chuyển look-up table (LUT) sử dụng hàm cv2.LUT().

Thời gian chạy với hàm này sẽ là :

Tốc độ rất nhanh ( 27.6 ms >> 2.51s)

2. Độ tương phản cao (Overexposure)

Với trường hợp này thì ta cần giảm độ sáng xuống, hay tăng độ tối. Vì vậy, sử dụng gamma > 1:

Cho ảnh đầu vào :

Ở đây sử dụng gamma = 4.

Kết quả đẩu ra:

Correct using pixel transform

Reference: https://docs.opencv.org/3.4/d3/dc1/tutorial_basic_linear_transform.html

Dùng phép toán nhân và cộng

g(x)=αf(x)+βg(x) = alpha f(x) + beta

αalpha

βbeta

còn được gọi là tham số gain và bias, hoặc tham số để điều chỉnh contrast (độ tương phản) và brightness (độ sáng)

Với ảnh số:

g(i,j)=αf(i,j)+βg(i, j) = alpha cdot f(i, j) + beta

Đầu vào vẫn là ảnh Overexposure.
Link code: here

Kết quả đầu ra sẽ là :

Có một cách dùng thư viện của opencv để nhanh hơn:

Image negatives

Ta có thể chuyển từ ảnh bên trái sang bên phải ( đổi đen thành trắng và trắng thành đen 😃)

Nghĩ có về khó khăn nhưng thật ra rất đơn giản:

Combining images

1. Combination of different exposures for high-dynamic range imaging

Ta có 4 ảnh với 4 độ sáng khác nhau:

Ta sẽ kết hợp tính giá trị trung bình để tạo ra 1 ảnh mới đẹp hơn.

Link code: here

Kết quả sẽ ra như sau:

2. Phép trừ ảnh:

Để tìm ra sự khác biệt giữa 2 ảnh với nhau. Đâu tiên ta sẽ trừ 2 ảnh sau đó tăng độ tương phản để nhìn rõ sự khac nhau hơn:

3. Video background subtraction

Từ phép trừ ảnh, ta ứng dụng váo video để tìm sự khác biệt khung hình trước và sau:

Tài liệu

Github: here

Colab: Here

Slide: Here

Kết luận

Bài viết đến đây đã dài, nếu có thắc mắc hoặc sai sót gì các bạn có thể comment xuống dưới. Bài Tiếp theo chúng ta tìm hiểu Histogram. Xin chào và hẹn gặp lại các ban.

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo