Từ học xử lý ảnh

03/06/2022 Camera AI, Khám phá 1,139 lượt xem

Từ học xử lý ảnh

Học sâu đã có tác động to lớn đến nhiều lĩnh vực công nghệ khác nhau trong vài năm qua. Một trong những chủ đề nóng nhất được bàn tán sôi nổi trong ngành công nghiệp này là thị giác máy tính, với khả năng của máy có thể tự hiểu hình ảnh và video. Xe tự lái, sinh trắc học và nhận dạng khuôn mặt đều dựa vào thị giác máy tính để hoạt động. Và cốt lõi của thị giác máy tính không gì khác ngoài xử lý hình ảnh. Nếu là một “newbie” trong ngành này, bài viết dưới đây sẽ là một gợi mở hữu ích, giúp bạn nắm được các khái niệm căn bản về xử lý dữ liệu hình ảnh.

Một hình ảnh được định nghĩa là một hàm hai chiều, F (x, y), trong đó x và y là các tọa độ không gian, và biên độ của F tại bất kỳ cặp tọa độ (x, y) nào được gọi là cường độ của hình ảnh tại điểm đó. Khi các giá trị x, y và biên độ của F là hữu hạn, ta gọi nó là hình ảnh số hóa (digital image). Nói cách khác, một hình ảnh có thể được xác định bởi một mảng hai chiều, sắp xếp cụ thể theo hàng và cột.

Hình ảnh số hóa bao gồm một số lượng hữu hạn các phần tử, mỗi phần tử có một giá trị cụ thể tại một vị trí cụ thể. Các phần tử này được gọi là phần tử hình ảnh (picture elements, image elements hay pixel, trong đó pixel là thuật ngữ thông dụng nhất).

Hình ảnh được biểu thị bằng kích thước (chiều cao và chiều rộng) dựa trên số lượng pixel. Ví dụ: nếu kích thước của hình ảnh là 500 x 400 (chiều rộng x chiều cao), thì tổng số pixel trong hình ảnh là 200000.

Các loại hình ảnh

  • Ảnh nhị phân: Đúng như tên gọi, ảnh nhị phân chỉ chứa những pixel có giá trị 0 hoặc 1 trong đó 0 chỉ màu đen và 1 chỉ màu trắng. Hình ảnh này còn được gọi là Đơn sắc.
  • Ảnh đen-trắng
  • Ảnh màu 8 bit: Đây là định dạng hình ảnh nổi tiếng nhất, có 256 sắc thái màu khác nhau và thường được gọi là hình ảnh thang độ xám. Trong định dạng này, 0 chỉ màu đen, và 255 chỉ màu trắng, và 127 chỉ màu xám.
  • Ảnh màu 16 bit: Đây là định dạng ảnh màu có 65.536 màu sắc khác nhau, nó còn được gọi là định dạng màu cao. Ở định dạng này, sự phân bố màu sắc không giống như hình ảnh Thang độ xám mà thường được chia thành 3 kênh màu Đỏ, Xanh lục và Xanh lam.

Xử lý ảnh là gì?

Xử lý ảnh là quá trình chuyển đổi một hình ảnh sang dạng kỹ thuật số và thực hiện các thao tác nhất định để nhận được một số thông tin hữu ích từ hình ảnh đó. Hệ thống xử lý hình ảnh thường coi tất cả các hình ảnh là tín hiệu 2D khi áp dụng một số phương pháp xử lý tín hiệu đã xác định trước.

Các loại xử lý hình ảnh chính:

  • Nhận diện – Phân biệt hoặc phát hiện các đối tượng trong hình ảnh
  • Làm sắc nét và phục hồi – Tạo hình ảnh nâng cao từ hình ảnh gốc
  • Nhận dạng mẫu – Đo các mẫu khác nhau xung quanh các đối tượng trong hình ảnh
  • Truy xuất – Duyệt và tìm kiếm hình ảnh từ một cơ sở dữ liệu lớn gồm các hình ảnh kỹ thuật số tương tự như hình ảnh gốc

Các bước xử lý hình ảnh cơ bản

  • Thu thập ảnh: Thu thập hình ảnh là bước đầu tiên trong quá trình xử lý hình ảnh, hay còn được gọi là tiền xử lý. Nó liên quan đến việc lấy hình ảnh từ một nguồn, thường là nguồn dựa trên phần cứng.
  • Tăng cường hình ảnh: Tăng cường hình ảnh là quá trình làm nổi bật các đặc điểm trong hình ảnh đã bị che khuất, bằng cách thay đổi độ sáng, độ tương phản, v.v.
  • Phục hồi hình ảnh: Phục hồi hình ảnh là quá trình cải thiện hình ảnh, sử dụng các mô hình toán học hoặc xác suất nhất định.
  • Xử lý hình ảnh màu: Xử lý ảnh màu bao gồm một số kỹ thuật tạo mô hình màu trong miền kỹ thuật số.
  • Wavelets và xử lý đa phân giải: Wavelet được sử dụng để biểu diễn hình ảnh ở nhiều mức độ phân giải khác nhau.
  • Nén: Nén là một quá trình được sử dụng để giảm dung lượng lưu trữ hoặc băng thông cần thiết để truyền tải hình ảnh đó.
  • Xử lý hình thái: Xử lý hình thái liên quan đến các kỹ thuật trích xuất thành phần của ảnh nhằm phục vụ việc biểu diễn và mô tả hình dạng.
  • Phân đoạn: Phân đoạn là một trong những bước xử lý ảnh khó nhất, liên quan đến việc phân vùng một hình ảnh thành các phần hoặc đối tượng cấu thành của nó.
  • Trình bày và mô tả: Sau khi một hình ảnh được phân đoạn thành các vùng, mỗi vùng được đại diện và mô tả ở dạng phù hợp cho quá trình xử lý tiếp theo. Phần trình bày liên quan đến đặc điểm của hình ảnh và thuộc tính vùng. Mô tả đề cập đến việc trích xuất thông tin định lượng giúp phân biệt một lớp đối tượng với lớp khác.
  • Nhận dạng: Nhận dạng gán nhãn cho một đối tượng dựa trên mô tả của nó.

  • Ảnh trong máy tính
    • Hệ màu RGB
    • Ảnh màu
    • Tensor là gì
    • Ảnh xám
    • Chuyển hệ màu của ảnh
  • Phép tính convolution
    • Convolution
    • Padding
    • Stride
    • Ý nghĩa của phép tính convolution

Ảnh trong máy tính

Hệ màu RGB

RGB viết tắt của red (đỏ), green (xanh lục), blue (xanh lam), là ba màu chính của ánh sáng khi tách ra từ lăng kính. Khi trộn ba màu trên theo tỉ lệ nhất định có thể tạo thành các màu khác nhau.

Từ học xử lý ảnh
Thêm đỏ vào xanh lá cây tạo ra vàng; thêm vàng vào xanh lam tạo ra trắng. Nguồn wiki.

Ví dụ khi bạn chọn màu ở đây. Khi bạn chọn một màu thì sẽ ra một bộ ba số tương ứng (r,g,b)

Từ học xử lý ảnh
màu được chọn là rgb(102, 255, 153), nghĩa là r=102, g=255, b=153.

Với mỗi bộ 3 số r, g, b nguyên trong khoảng [0, 255] sẽ cho ra một màu khác nhau. Do có 256 cách chọn r, 256 cách chọn màu g, 256 cách chọn b => tổng số màu có thể tạo ra bằng hệ màu RGB là: 256 * 256 * 256 = 16777216 màu !!!

Ảnh màu

Ví dụ về ảnh màu

Từ học xử lý ảnh
Mathematical bridge, Cambridge

Khi bạn kích chuột phải vào ảnh trong máy tính, bạn chọn properties (mục cuối cùng), rồi chọn tab detail

Từ học xử lý ảnh

Bạn sẽ thấy chiều dài ảnh là 800 pixels (viết tắt px), chiều rộng 600 pixels, kích thước là 800 * 600. Trước giờ chỉ học đơn vị đo là mét hay centimet, pixel là gì nhỉ ?

Theo wiki, pixel (hay điểm ảnh) là một khối màu rất nhỏ và là đơn vị cơ bản nhất để tạo nên một bức ảnh kỹ thuật số.

Vậy bức ảnh trên kích thước 800 pixel * 600 pixel, có thể biểu diễn dưới dạng một ma trận kích thước 600 * 800 (vì định nghĩa ma trận là số hàng nhân số cột).

Từ học xử lý ảnh

Trong đó mỗi phần tử w_{ij} là một pixel.

Như vậy có thể hiểu là mỗi pixel thì biểu diễn một màu và bức ảnh trên là sự kết hợp rất nhiều pixel. Hiểu đơn giản thì in bức ảnh ra, kẻ ô vuông như chơi cờ ca rô với 800 đường thẳng ở chiều dài, 600 đường ở chiều rộng, thì mỗi ô vuông là một pixel, biểu diễn một chấm màu.

Tuy nhiên để biểu diễn 1 màu ta cần 3 thông số (r,g,b) nên gọi w_{ij} = (r_{ij}, g_{ij}, b_{ij}) để biểu diễn dưới dạng ma trận thì sẽ như sau:

Từ học xử lý ảnh
Ảnh màu kích thước 3*3 biểu diễn dạng ma trận, mỗi pixel biểu diễn giá trị (r,g,b)

Để tiện lưu trữ và xử lý không thể lưu trong 1 ma trận như thế kia mà sẽ tách mỗi giá trị trong mỗi pixel ra một ma trận riêng.

Từ học xử lý ảnh
Tách ma trận trên thành 3 ma trận cùng kích thước: mỗi ma trận lưu giá trị từng màu khác nhau red, green, blue

Tổng quát

Từ học xử lý ảnh
Tách ma trận biểu diễn màu ra 3 ma trận, mỗi ma trận lưu giá trị 1 màu.

Mỗi ma trận được tách ra được gọi là 1 channel nên ảnh màu được gọi là 3 channel: channel red, channel green, channel blue.

Tóm tắt: Ảnh màu là một ma trận các pixel mà mỗi pixel biểu diễn một điểm màu. Mỗi điểm màu được biểu diễn bằng bộ 3 số (r,g,b). Để tiện cho việc xử lý ảnh thì sẽ tách ma trận pixel ra 3 channel red, green, blue.

Tensor là gì

Khi dữ liệu biểu diễn dạng 1 chiều, người ta gọi là vector, mặc định khi viết vector sẽ viết dưới dạng cột.

Khi dữ liệu dạng 2 chiều, người ta gọi là ma trận, kích thước là số hàng * số cột.

Từ học xử lý ảnh
Vector v kích thước n, ma trận W kích thước m*n

Khi dữ liệu nhiều hơn 2 nhiều thì sẽ được gọi là tensor, ví dụ như dữ liệu có 3 chiều.

Để ý thì thấy là ma trận là sự kết hợp của các vector cùng kích thước. Xếp n vector kích thước m cạnh nhau thì sẽ được ma trận m*n. Thì tensor 3 chiều cũng là sự kết hợp của các ma trận cùng kích thước, xếp k ma trận kích thước m*n lên nhau sẽ được tensor kích thước m*n*k.

Từ học xử lý ảnh
Hình hộp chữ nhật kích thước a*b*h

Tưởng tượng mặt đáy là một ma trận kích thước a * b, được tạo bởi b vector kích thước a. Cả hình hộp là tensor 3 chiều kích thước a*b*h, được tạo bởi xếp h ma trận kích thước a*b lên nhau.

Do đó biểu diễn ảnh màu trên máy tính ở phần trên sẽ được biểu diễn dưới dạng tensor 3 chiều kích thước 600*800*3 do có 3 ma trận (channel) màu red, green, blue kích thước 600*800 chồng lên nhau.

Ví dụ biểu diễn ảnh màu kích thước 28*28, biểu diễn dưới dạng tensor 28*28*3

Từ học xử lý ảnh
Nguồn: https://www.slideshare.net/BertonEarnshaw/a-brief-survey-of-tensors

Ảnh xám

Từ học xử lý ảnh
Ảnh xám của mathematical bridge

Tương tự ảnh màu, ảnh xám cũng có kích thước 800 pixel * 600 pixel, có thể biểu diễn dưới dạng một ma trận kích thước 600 * 800 (vì định nghĩa ma trận là số hàng nhân số cột).

Từ học xử lý ảnh

Tuy nhiên mỗi pixel trong ảnh xám chỉ cần biểu diễn bằng một giá trị nguyên trong khoảng từ [0,255] thay vì (r,g,b) như trong ảnh màu. Do đó khi biểu diễn ảnh xám trong máy tính chỉ cần một ma trận là đủ.

Từ học xử lý ảnh
Biểu diễn ảnh xám

Giá trị 0 là màu đen, 255 là màu trắng và giá trị pixel càng gần 0 thì càng tối và càng gần 255 thì càng sáng.

Chuyển hệ màu của ảnh

Mỗi pixel trong ảnh màu được biểu diễn bằng 3 giá trị (r,g,b) còn trong ảnh xám chỉ cần 1 giá trị x để biểu diễn.

Khi chuyển từ ảnh màu sang ảnh xám ta có thể dùng công thức: x = r * 0.299 + g * 0.587 + b * 0.114.

Tuy nhiên khi chuyển ngược lại, bạn chỉ biết giá trị x và cần đi tìm r,g,b nên sẽ không chính xác.

Phép tính convolution

Convolution

Để cho dễ hình dung mình sẽ lấy ví dụ trên ảnh xám, tức là ảnh được biểu diễn dưới dạng ma trận A kích thước m*n.

Ta định nghĩa kernel là một ma trận vuông kích thước k*k trong đó k là số lẻ. k có thể bằng 1, 3, 5, 7, 9,… Ví dụ kernel kích thước 3*3

Từ học xử lý ảnh

Kí hiệu phép tính convolution (\otimes), kí hiệu Y = X \otimes W

Với mỗi phần tử x_{ij} trong ma trận X lấy ra một ma trận có kích thước bằng kích thước của kernel W có phần tử x_{ij} làm trung tâm (đây là vì sao kích thước của kernel thường lẻ) gọi là ma trận A. Sau đó tính tổng các phần tử của phép tính element-wise của ma trận A và ma trận W, rồi viết vào ma trận kết quả Y.

Từ học xử lý ảnh

Ví dụ khi tính tại x_{22} (ô khoanh đỏ trong hình), ma trận A cùng kích thước với W, có x_{22} làm trung tâm có màu nền da cam như trong hình. Sau đó tính y_{11} = sum(A \otimes W) = x_{11}*w_{11} + x_{12}*w_{12} + x_{13}*w_{13} + x_{21}*w_{21} + x_{22}*w_{22} + x_{23}*w_{23} + x_{31}*w_{31} + x_{32}*w_{32} + x_{33}*w_{33} = 4. Và làm tương tự với các phần tử còn lại trong ma trận.

Thế thì sẽ xử lý thế nào với phần tử ở viền ngoài như x_{11}? Bình thường khi tính thì sẽ bỏ qua các phần tử ở viền ngoài, vì không tìm được ma trận A ở trong X.

Từ học xử lý ảnh

Nên bạn để ý thấy ma trận Y có kích thước nhỏ hơn ma trận X. Kích thước của ma trận Y là (m-k+1) * (n-k+1).

Từ học xử lý ảnh
Các bước thực hiện phép tính convolution cho ma trận X với kernel K ở trên

Padding

Như ở trên thì mỗi lần thực hiện phép tính convolution xong thì kích thước ma trận Y đều nhỏ hơn X. Tuy nhiên giờ ta muốn ma trận Y thu được có kích thước bằng ma trận X => Tìm cách giải quyết cho các phần tử ở viền => Thêm giá trị 0 ở viền ngoài ma trận X.

Từ học xử lý ảnh
Ma trận X khi thêm viền 0 bên ngoài

Rõ ràng là giờ đã giải quyết được vấn đề tìm A cho phần tử x_{11} , và ma trận Y thu được sẽ bằng kích thước ma trận X ban đầu.

Phép tính này gọi là convolution với padding=1. Padding=k nghĩa là thêm k vector 0 vào mỗi phía của ma trận.

Stride

Như ở trên ta thực hiện tuần tự các phần tử trong ma trận X, thu được ma trận Y cùng kích thước ma trận X, ta gọi là stride=1.

Từ học xử lý ảnh
stride=1, padding=1

Tuy nhiên nếu stride=k (k > 1) thì ta chỉ thực hiện phép tính convolution trên các phần tử x_{1+i*k,1+j*k}. Ví dụ k = 2.

Từ học xử lý ảnh
padding=1, stride=2

Hiểu đơn giản là bắt đầu từ vị trí x_{11} sau đó nhảy k bước theo chiều dọc và ngang cho đến hết ma trận X.

Kích thước của ma trận Y là 3*3 đã giảm đi đáng kể so với ma trận X.

Công thức tổng quát cho phép tính convolution của ma trận X kích thước m*n với kernel kích thước k*k, stride = s, padding = p ra ma trận Y kích thước \displaystyle(\frac{m-k+2p}{s}+1) * (\frac{n-k+2p}{s}+1).

Stride thường dùng để giảm kích thước của ma trận sau phép tính convolution.

Mọi người có thể xem thêm trực quan hơn ở đây.

Ý nghĩa của phép tính convolution

Mục đích của phép tính convolution trên ảnh là làm mở, làm nét ảnh; xác định các đường;… Mỗi kernel khác nhau thì sẽ phép tính convolution sẽ có ý nghĩa khác nhau. Ví dụ:

Từ học xử lý ảnh
Nguồn: https://en.wikipedia.org/wiki/Kernel_(image_processing)

Tags: computer visionhệ màu RGBImage processingXử lý ảnh