Xử Lý Hình ảnh Bằng Python - Koodibar
Có thể bạn quan tâm
- Một chút căn bản về ảnh kỹ thuật số (digital image)
- Xử lý hình ảnh bằng Pillow và OpenCV
- 1. Chuyển ảnh màu sang grayscale
- 1.1 Code thủ công
- 1.2 Sử dụng Pillow
- 2. Thay đổi độ tương phản (contrast)
- 3. Thay đổi độ sáng (brightness)
- 4. Làm mờ (Gaussian blur)
- 5. Làm tối 4 góc (vignette) sử dụng OpenCV và numpy
- 1. Chuyển ảnh màu sang grayscale
- Cơm thêm
- Tìm các cạnh bằng phương pháp Canny (Canny edge detection)
- Vẽ countour của ảnh
- Nhận diện gương mặt bằng OpenCV
Một hình ảnh (kỹ thuật số) được tạo thành bởi nhiều phần tử gọi là pixel (hay điểm ảnh). Thường thì một hình được biểu diễn bằng một mảng hai chiều gồm nhiều pixels. Mỗi pixel (cụ thể là hình RGB) mang trong mình 3 thông số màu: Red, Green, Blue.
Ngoài ra, đối với không gian RGBA thì nó có một kênh thứ 4 là Alpha, trong đó Alpha là một thông số chỉ độ trong suốt của pixel đó.
Như đã nói ở trên, một pixel mang 3 giá trị màu, vì trên thực tế mỗi pixel được cấu thành bao gồm 3 sub-pixels. Và pixel cũng không có kích thước vật lý cụ thể, mà nó phụ thuộc vào pixel density. Mỗi pixel chứa được 256 (0-255) giá trị, cho nên về mặt lý thuyết 3 sub-pixels hiện thị được 256^3 = 16777216 (~16 triệu màu). Nhưng tất nhiên là mắt người chưa hẳn đã phân biệt được 16 triệu màu này.
Xử lý hình ảnh bằng Pillow và OpenCVTrong toàn bài này mình sẽ sử dụng ảnh này làm ảnh gốc để chỉnh sửa. Phần code có hơi mì ăn liền cho nên bạn nào khó tính vui lòng bỏ qua.
1. Chuyển ảnh màu sang grayscale
Về cơ bản thì grayscale (hình trắng đen) là loại ảnh mà tất cả pixels chỉ mang thông tin về độ sáng, hay nói cách khác chỉ thể hiện các sắc thái của màu xám (Luminance mode). Trong không gian màu RGB, thì màu xám là màu mà các sắc tố Red, Green, Blue có giá trị bằng nhau. Ví dụ màu đỏ là rgb(255, 0, 0) thì nếu ta muốn chuyển nó sang xám thì lấy giá trị trung bình của 3 sub-pixels và tạo thành 1 pixel mới rgb(85, 85, 85)
1.1 Code thủ công
Đầu tiên chúng ta áp dụng lý thuyết ở trên để sửa từng pixel cho ảnh gốc để tạo ra ảnh mới:
Chúng ta có ảnh gốc được chuyển thành grayscale như sau:
1.2 Sử dụng Pillow
Pillow là một bản fork của PIL (Python Image Library) một thư viện xử lý hình ảnh của Python. Do PIL được phát hành từ 2009 và không có cập nhật thường xuyên, cho nên PIL đã bị thay thế bở Pillow trên các bản phân phối của Debian và Ubuntu luôn.
Kết quả hơi khác so code thủ công ở trên một xíu, ví dụ cái màu áo của Morty ở trên là rgb(227, 227, 227) nhưng ở dưới là rgb(184, 184, 184)
2. Thay đổi độ tương phản (contrast)
Để thay đổi độ tương phản của pixel bằng Pillow khá đơn giản
Trong đó thì factor là một giá trị để kiểm soát độ tương phản, 1.0 là tương đương hình gốc, còn thấp hơn 1.0 là giảm độ tương phản vân vân và mây mây.
factor – A floating point value controlling the enhancement. Factor 1.0 always returns a copy of the original image, lower factors mean less color (brightness, contrast, etc), and higher values more. There are no restrictions on this value.
Mình cũng không rõ Pillow thay đổi độ tương phản bằng cách nào, nhưng về lý thuyết chung thì làm tăng/giảm contrast là làm tối (darkening) nhưng pixel có giá trị dưới một mức nào đó, và làm sáng (lightening) những pixels có giá trị trên một mức nào đó. Độ chênh lệch này sẽ làm tăng hay giảm sự tương phản.
Các bạn có thể xem thêm công thức thay đổi độ tương phản của pixel ở đây, nhưng kết quả từ công thức này không ổn lắm nên mình không post kết quả ở đây.
3. Thay đổi độ sáng (brightness)
Để thay đổi độ sáng của ảnh bằng Pillow cũng rất đơn giản, ta làm như sau:
Để thay đổi độ sáng của pixels bằng cách thủ công cũng khá đơn giản, ta chỉ cần tăng hay giảm giá trị của từng pixel là được, chỉ cần lưu ý truncate giá trị đó sao cho nó nằm trong khoảng 0-255 là được.
4. Làm mờ (Gaussian blur)
Guassian blur Phương pháp làm mờ hình ảnh sử dụng Gussian function để giảm nhiễu và chi tiết trên bức ảnh.
Giải thích ngắn gọn thì cái ma trận 3x3 trong hình được gọi là kernel. Chúng ta áp dụng cái filter như hình cho từng pixel thì cuối cùng chúng ta sẽ có một hình đã được làm mờ. Để sẽ giải thích chi tiết ở các bài sau.
*Nguồn Digital Image processing
5. Làm tối 4 góc (vignette) sử dụng OpenCV và numpy
Cơm thêmPhần này không liên quan tới xử lý hình ảnh ở trên
Tìm các cạnh bằng phương pháp Canny (Canny edge detection)
Vẽ countour của ảnh
Contour trong image proccesing là những đường nối những điểm liền nhau tạo thành hình dáng của vật trong ảnh (không phải contour trong trang điểm). Nó là một công cụ rất hữu ích trong nhận dạng và định danh các vật thể trong hình (object detection and recognition).
Nhận diện gương mặt bằng OpenCV
Sử dụng Haar Cascade classifier của OpenCV. Tải về file haarcascade_frontalface_default.xml ở đây
Từ khóa » Thuật Toán Xử Lý ảnh Trong Python
-
Xử Lý Hình ảnh Trong Python: Từ Thuật Toán đến Công Cụ - VinBigData
-
Xử Lý Ảnh Cơ Bản Với OpenCV Trong Python (P1) - CodeLearn
-
Convolution - Xử Lý ảnh Qua Ví Dụ Python Thực Tế - Techmaster
-
Bài Tập Xử Lý ảnh Có Lời Gải – Code Python ( OpenCV )
-
Tách Biên ảnh Trong Bài Toán Nhận Dạng Người Và Vật Thể - YouTube
-
Xử Lý ảnh Với OpenCV Python - Bài 4 - YouTube
-
Tìm Hiểu Xử Lý ảnh Bằng OpenCV Trong Python - Thực Hành 2
-
Xử Lý ảnh Với Opencv-python Cơ Bản ( Phần 1/n) - Hóng Tin
-
Nhận Dạng ảnh Cơ Bản Với Python - Viblo
-
Xử Lý ảnh - OpenCV đọc Ghi Hình ảnh (code Python Và C++)
-
Bài 21 - Tiền Xử Lý ảnh OpenCV
-
Detect Ký Tự Trong Hình ảnh - Viblo
-
Lập Trình OpenCV - THỊ GIÁC MÁY TÍNH
-
Xử Lý ảnh Với Python Và Opencv - Tài Liệu Text - 123doc