Phép nội suy nhị phân trong python xử lý ảnh

Tỷ lệ hình ảnh là một phần thiết yếu của xử lý hình ảnh. Hình ảnh cần được phóng to hoặc thu nhỏ vì nhiều lý do. Trong bài viết này, chúng ta sẽ xem xét các phương pháp chia tỷ lệ hình ảnh khác nhau và chúng ta sẽ triển khai chúng trong Python

Bài viết này là một phần của loạt bài thảo luận về khái niệm xử lý ảnh. Tham khảo các bài viết trước

  1. Xử lý hình ảnh và thao tác pixel. Bộ lọc ảnh
  2. Cách tạo ảnh ghép bằng Python

Chúng tôi sẽ giả sử rằng chúng tôi có một hình ảnh có độ phân giải width×height mà chúng tôi muốn thay đổi kích thước thành new_width×new_height. Đầu tiên, chúng tôi sẽ giới thiệu các hệ số tỷ lệ scale_xscale_y được định nghĩa như sau

scale_x = new_width / width
scale_y = new_height / height

A scale factor 1 indicates stretching.

Chúng tôi sẽ phải nhập hình ảnh vào một mảng, tôi sẽ sử dụng PIL cho việc này

Từ giờ trở đi, tôi sẽ chỉ nói về phần

im.resize[size, Image.NEAREST]
0

Chúng tôi sẽ lấy hai ảnh này [Ảnh đầu tiên của John-Mark Smith từ Unsplash và ảnh thứ hai của Hiếu Hoàng từ Pexels] làm ví dụ. Ảnh gốc có độ phân giải

im.resize[size, Image.NEAREST]
1 [~2 Megapixel]

Chúng tôi sẽ thu nhỏ những hình ảnh này xuống thành

im.resize[size, Image.NEAREST]
2 và tăng tỷ lệ lên thành
im.resize[size, Image.NEAREST]
3 , hệ số tỷ lệ là
im.resize[size, Image.NEAREST]
4 và
im.resize[size, Image.NEAREST]
5. Điều quan trọng là không sử dụng các số đẹp, chẳng hạn như hệ số tỷ lệ là 2, 4, 0. 5, vì chúng có thể là các trường hợp cạnh khi các thuật toán đưa ra các kết quả hấp dẫn không phản ánh trường hợp chung

Ảnh của John-Mark Smith từ Bapt

Ảnh của Hiếu Hoàng từ Pexels

Nội suy lân cận gần nhất

Đây có lẽ là phương pháp chia tỷ lệ hình ảnh đơn giản nhất. Mỗi pixel đầu ra được thay thế bằng pixel gần nhất của nó trong đầu vào

Trong 1 chiều, giá trị tại x là giá trị của điểm gần nó nhất

Đường màu xanh là phép nội suy lân cận gần nhất của các chấm đỏ. Hình ảnh của tác giả

Trong 2D, một pixel có tọa độ [x, y] trong hình ảnh đầu ra có tọa độ [x/scale_x, y/scale_y] trong hình ảnh đầu vào. Vì các tọa độ này không phải lúc nào cũng tồn tại [nếu chúng có phần thập phân], chúng tôi sẽ làm tròn tọa độ thành số nguyên gần nhất, do đó làm tròn đến hàng xóm gần nhất

Pixel màu xanh lá cây được xấp xỉ bởi hàng xóm gần nhất của nó. Hình ảnh của tác giả

Việc thực hiện này sẽ như thế này

Kết quả

Ảnh được thu nhỏ [trái] và phóng to [phải] Ảnh của John-Mark Smith từ Bapt

Ảnh thu nhỏ [trái] và phóng to [phải] Ảnh của Hiếu Hoàng từ Pexels

Thay vào đó, bạn có thể sử dụng phương pháp

im.resize[size, Image.NEAREST]
7 của
im.resize[size, Image.NEAREST]
6

im.resize[size, Image.NEAREST]
Nội suy song tuyến tính

Nội suy tuyến tính [a. k. một lerp] tương đương với việc vẽ một đường thẳng giữa hai điểm liên tiếp. Điều này cũng có thể được coi là lấy trung bình cộng của các điểm lân cận có trọng số theo khoảng cách của chúng

Đường màu xanh là phép nội suy tuyến tính của các chấm đỏ. Hình ảnh của tác giả

Trong 2 chiều, phép nội suy này liên quan đến 4 điểm lân cận. Nội suy tuyến tính được thực hiện trên các điểm 2 điểm trên cùng [Q11 và Q12] và 2 điểm dưới cùng [Q21 và Q22] để thu được hai điểm mới [P1 và P2]. Sau đó, phép nội suy tuyến tính được áp dụng cho các điểm mới để có được điểm nội suy P

Điểm màu xanh lá cây là phép nội suy song tuyến tính của các chấm màu đỏ. Hình ảnh của tác giả

Thực hiện điều này trong python

Ảnh được thu nhỏ [trái] và phóng to [phải] Ảnh của John-Mark Smith từ Bapt

Ảnh thu nhỏ [trái] và phóng to [phải] Ảnh của Hiếu Hoàng từ Pexels

Thay vào đó, bạn có thể sử dụng phương pháp

im.resize[size, Image.NEAREST]
7 của
im.resize[size, Image.NEAREST]
6

im.resize[size, Image.BILINEAR]
Nội suy song phương

Tương đương 1 chiều của phép nội suy nhị phân là phép nội suy spline bậc ba

Thay vì vẽ các đường giữa các điểm, nội suy spline bậc ba vẽ các đường cong mượt mà. Những đường cong trơn này là đa thức bậc 3

Nội suy spline khối yêu cầu 4 điểm lân cận. Và 4 hệ số được tính theo điều kiện

  • Đạo hàm tại 2 điểm lân cận bên trong là độ dốc giữa các điểm lân cận bên trong và các điểm lân cận bên ngoài
  • Các hàng xóm bên trong phải là một phần của đường cong

Ví dụ về phép nội suy nhị phân của 4 điểm. Hình ảnh của tác giả

Các điều kiện có thể được chuyển thành các công thức bằng cách tính các đạo hàm và đặt chúng bằng các gradient và bằng cách đánh giá công thức bậc ba tại các điểm lân cận bên trong

Chúng ta có thể tính toán điều này bằng cách sử dụng hàm

im.resize[size, Image.BILINEAR]
1 của
im.resize[size, Image.BILINEAR]
0

Đường màu xanh là phép nội suy nhị phân của các chấm đỏ. Hình ảnh của tác giả

Trong 2D, điều này sẽ liên quan đến 16 điểm. Chúng ta sẽ thực hiện phép nội suy spline bậc ba trên 4 hàng điểm, sau đó thực hiện một phép nội suy spline bậc ba cuối cùng trên 4 điểm mới được nội suy

Minh họa phép nội suy nhị phân của Cmglee từ Wikimedia

Thực hiện thuật toán này một cách hiệu quả là rất khó. Thay vào đó, bạn có thể sử dụng phương thức

im.resize[size, Image.NEAREST]
6 của
im.resize[size, Image.NEAREST]
7

im.resize[size, Image.BICUBIC]

Ảnh được thu nhỏ [trái] và phóng to [phải] Ảnh của John-Mark Smith từ Bapt

Ảnh thu nhỏ [trái] và phóng to [phải] Ảnh của Hiếu Hoàng từ Pexels

lấy mẫu hộp

Hình ảnh của tác giả

Phương pháp này được sử dụng đặc biệt để thu nhỏ. Khi sử dụng một trong các thuật toán ở trên để thu nhỏ kích thước, một số pixel hoàn toàn bị bỏ qua. Điều này dẫn đến chất lượng thu nhỏ kém. Để khắc phục điều này, lấy mẫu hộp xem mọi pixel trong hình ảnh được thu nhỏ dưới dạng hộp trong ảnh gốc. Và màu của nó là trung bình cộng của các màu bên trong hộp

Hình ảnh được thu nhỏ lại bằng cách sử dụng lấy mẫu hộp. Ảnh của John-Mark Smith từ Bapt [trái] Ảnh của Hiếu Hoàng từ Pexels [phải]

Thay vào đó, bạn có thể sử dụng phương pháp

im.resize[size, Image.NEAREST]
7 của
im.resize[size, Image.NEAREST]
6

im.resize[size, Image.BOX]

Có các thuật toán chia tỷ lệ hình ảnh khác như lấy mẫu lại Sinc và Lanczos hoặc thuật toán dựa trên mạng thần kinh tích chập sâu, nhưng chúng phức tạp hơn một chút

Tỷ lệ hình ảnh là một phần quan trọng của xử lý hình ảnh. Trong bài viết này, tôi chỉ thảo luận về các thuật toán chia tỷ lệ đơn giản và nguyên tắc đằng sau chúng cho hình ảnh. Các thuật toán mở rộng video theo thời gian thực thường được thực hiện trên phần cứng [GPU] để có hiệu suất nhanh hơn

Phép nội suy nhị phân trong xử lý ảnh là gì?

Nội suy song phương là một hệ thống 2D sử dụng các đường nối khối hoặc kỹ thuật đa thức khác để làm sắc nét và phóng to hình ảnh kỹ thuật số . Nó thường được sử dụng trong phần mềm chỉnh sửa hình ảnh trên máy tính, bởi người chỉnh sửa và người chỉnh sửa khi nâng cấp hoặc lấy mẫu lại hình ảnh.

Nội suy bicubic có nghĩa là gì?

Trong toán học, phép nội suy nhị phân là một phần mở rộng của phép nội suy bậc ba [đừng nhầm lẫn với phép nội suy bậc ba, một phương pháp áp dụng phép nội suy bậc ba cho một tập dữ liệu] để nội suy các điểm dữ liệu trên lưới thông thường hai chiều

Phương pháp nội suy nào là tốt nhất trong xử lý ảnh?

NỘI DUNG BICCU .

Các loại nội suy khác nhau trong OpenCV là gì?

Năm phương pháp nội suy như vậy được cung cấp với OpenCV là INTER_NEAREST , INTER_LINEAR , INTER_AREA , INTER_CUBIC và INTER_LANCZOS4 . Trong số năm phương pháp đó, bốn trong số chúng khá dễ đoán cách chúng thực hiện phép nội suy.

Chủ Đề