Hướng dẫn python raw image processing - Xử lý ảnh thô của trăn

Tiền xử lý hình ảnh thô cho đường ống học máy

Ảnh của ShareGrid trên unplash

Hầu như tất cả các máy ảnh hiện đại đều chụp hình ảnh định dạng thô và xử lý chúng theo định dạng thường được gọi là SRGB, phù hợp cho con người nhìn thấy. Tuy nhiên, người ta có thể tự hỏi tất cả các kỹ thuật được sử dụng để chuyển đổi hình ảnh thô thành định dạng SRGB là gì? Tại sao nó lại cần thiết? Ngoài ra, người ta có thể tự hỏi làm thế nào để sử dụng hình ảnh thô hoặc xử lý chúng theo một cách nhất định để có được hiệu suất tốt hơn trên một số nhiệm vụ học máy. Bài viết này cố gắng trả lời tất cả các câu hỏi như vậy ngoài mã python từng bước cho mỗi quy trình.

Hầu hết các bộ lọc trên các ứng dụng truyền thông xã hội như Snapchat, Instagram, v.v., sử dụng máy học. Thuật toán học máy đằng sau các bộ lọc đó sử dụng hình ảnh thô để xử lý hình ảnh bộ lọc để cung cấp kết quả thời gian thực. Vì vậy, nó ngày càng trở nên quan trọng để biết hình ảnh thô nào và cách nó được xử lý bởi máy ảnh trong khi thiết kế một thuật toán sử dụng hình ảnh thô.

Chính xác thì một hình ảnh thô là gì?

Một hình ảnh thô có thể được định nghĩa là một hình ảnh được xử lý tối thiểu được chụp bởi máy ảnh. Vẫn chưa được xử lý bởi các phương pháp phần mềm để xử lý nhiễu nền, độ tương phản, mức độ đen, v.v ... Hình ảnh thô khó chịu với mắt người trong hầu hết các trường hợp và cần phải được xử lý để dễ dàng nhìn thấy. Làm thế nào một hình ảnh thô được chụp trong máy ảnh và cảm biến máy ảnh hoạt động như thế nào?

Làm thế nào để một cảm biến hình ảnh hoạt động?

Cảm biến hình ảnh có thể được coi là một mạch bao gồm một bề mặt được sử dụng để chụp ảnh sóng điện từ màn trập của máy ảnh hoặc khi cảm biến tiếp xúc với ánh sáng. Bề mặt cảm biến của cảm biến thu được cường độ của sóng điện từ, hay còn gọi là ánh sáng, đó là sự cố trên bề mặt tại thời điểm bắt giữ. Bề mặt có thể được coi là một mảng 2D trong đó mỗi phần tử lưu trữ cường độ sự cố ánh sáng. Nhưng, bằng cách chỉ lưu trữ cường độ ánh sáng, cảm biến không thể hiểu được màu sắc trong ánh sáng. Vì vậy, làm thế nào để cảm biến phát hiện màu sắc trong cảnh?But, by storing only the light’s intensities, the sensor cannot comprehend the colors in the light. So, how does the sensor detect the colors in the scene?

Để phát hiện màu trong một cảm biến, các kỹ thuật khác nhau được sử dụng; Một trong những điều phổ biến nhất và được sử dụng rộng rãi nhất là cảm biến bộ lọc Bayer và được thảo luận ở đây.Bayer-filter sensor and discussed here.

Bayer sắp xếp các bộ lọc màu (Nguồn: https: //en.wikipedia.org/wiki/bayer_filter)

Một bộ lọc Bayer được sử dụng để ánh xạ tín hiệu điện từ đến vào không gian RGB bằng cách sử dụng kỹ thuật lọc. Ánh sáng tới được lọc thành các màu đỏ, xanh lá cây và xanh dương bằng cách sử dụng bộ lọc bước sóng trước khi ánh sáng chiếu cảm biến. Sử dụng kỹ thuật này, có thể biết được cường độ của một màu cụ thể (trong trường hợp này, màu đỏ, xanh lá cây và xanh dương). Cường độ màu đỏ, xanh lá cây và xanh lam được lưu trữ xen kẽ trong bộ lọc Bayer, như trong hình. Các mẫu bộ lọc khác được sử dụng trên một số camera, nhưng mẫu bộ lọc Bayer là mẫu được sử dụng rộng rãi nhất.

Cách lấy các kênh màu từ hình ảnh này

Một hình ảnh thô Một mảng 2D bao gồm thông tin về cường độ ánh sáng ở bước sóng/màu sắc khác nhau. Để có được một kênh màu, chúng ta cần tách các pixel của mỗi màu và kết hợp chúng để tạo một hình ảnh. Tuy nhiên, người ta có thể dễ dàng thấy rằng số lượng pixel màu xanh lá cây gấp đôi các pixel màu. Trong trường hợp này, giá trị của các pixel màu xanh lá cây liền kề được tính trung bình để có được một giá trị duy nhất. Do đó, đối với hình ảnh thô có kích thước H x W, hình ảnh RGB cuối cùng thu được là h/2 x w/2 x 3.

Một hình ảnh thô chứa gì?

Tệp hình ảnh thô thường chứa hình ảnh dưới dạng mảng 2D được ghi trên cảm biến hình ảnh sau khi được truyền từ bộ lọc Bayer. Tệp chứa một lượng lớn siêu dữ liệu về máy ảnh, khẩu độ, điều kiện chiếu sáng, v.v. trong tệp, giúp trong quá trình xử lý hình ảnh. Một số loại siêu dữ liệu phổ biến là mức độ đen, mức trắng, định hướng, biến đổi không gian màu, v.v., được thảo luận trong bài viết này. Tất cả các bước này cần được thực hiện trên hình ảnh để chuyển đổi nó thành định dạng cần thiết để duy trì chất lượng.

Bây giờ, chúng tôi sẽ thảo luận chi tiết một số bước cùng với mã Python:

Mức màu đen:

Mức màu đen được định nghĩa là cường độ của phần tối nhất/tối nhất của hình ảnh. Cần phải hiệu chỉnh mức độ màu đen của hình ảnh trong quá trình xử lý sau để có được các pixel màu đen hoàn hảo không có trong các hình ảnh thô gốc. Các thuật toán khác nhau được sử dụng để điều chỉnh mức màu đen trong hình ảnh và vượt quá phạm vi bài viết này.

Orientation:-

Trong một số máy ảnh, hình ảnh được lưu trữ ngược chiều dọc, do đó, thông tin định hướng siêu dữ liệu giúp khắc phục hình ảnh trong các trường hợp như vậy. Ống kính trong máy ảnh chiếu hình ảnh vào cảm biến ở dạng đảo ngược. Đôi khi, nó cũng được lật trái phải. Hiệu ứng định hướng của ống kính thường được điều chỉnh trong nội bộ trong máy ảnh và không cần phải sửa chữa trong quá trình xử lý hậu kỳ.

Biến đổi không gian màu:-

Đây chủ yếu là bước cuối cùng trong bất kỳ đường ống xử lý hình ảnh nào.Hình ảnh được xử lý được chuyển đổi thành không gian màu cần thiết, chẳng hạn như SRGB, YCRCB, Grayscale, v.v., trước khi được lưu trữ trong đĩa.Không gian màu được sử dụng phổ biến nhất là không gian màu SRGB.Sau khi thực hiện chuyển đổi không gian màu, các hình ảnh được lưu trữ trên đĩa ở dạng .png, .jpeg, v.v., các định dạng lưu trữ hình ảnh.

Các đường ống camera phức tạp hơn nhiều so với cách mà chúng ta đã thảo luận ở đây, nhưng các chi tiết được thảo luận trong bài viết này là quá đủ để bắt đầu sử dụng dữ liệu hình ảnh thô trong đường ống học máy.

Hãy đặt câu hỏi trong phần bình luận.