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 Show 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
Chúng tôi sẽ giả sử rằng chúng tôi có một hình ảnh có độ phân giải scale_x = new_width / width A scale factor <1 indicates shrinking while 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 Từ giờ trở đi, tôi sẽ chỉ nói về phần im.resize(size, Image.NEAREST) 0Chú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 chungNộ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 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 Việc thực hiện này sẽ như thế này Kết quả
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) 6im.resize(size, Image.NEAREST) Nội suy song tuyến tínhNộ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 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 Thực hiện điều này trong python
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) 6im.resize(size, Image.BILINEAR) Nội suy song phươngTươ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
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) 0Trong 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 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) 7im.resize(size, Image.BICUBIC)
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 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) 6im.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. |