Bước đầu tiên là cân bằng sự khác biệt chiếu sáng trong hình ảnh trong khi tính đến các vấn đề cân bằng trắng. Lý thuyết ở đây là phần sáng nhất của hình ảnh trong một khu vực giới hạn tượng trưng cho màu trắng. Bằng cách làm mờ hình ảnh trước, chúng tôi loại bỏ ảnh hưởng của nhiễu trong hình ảnh.
from PIL import Image
from PIL import ImageFilter
im = Image.open(r'c:\temp\temp.png')
white = im.filter(ImageFilter.BLUR).filter(ImageFilter.MaxFilter(15))
Bước tiếp theo là tạo ra một hình ảnh màu xám quy mô từ đầu vào RGB. Bằng cách chia tỷ lệ cho điểm trắng, chúng tôi sửa cho các vấn đề cân bằng trắng. Bằng cách lấy tối đa R, G, B, chúng tôi nhấn mạnh bất kỳ màu nào không phải là màu xám tinh khiết như các đường màu xanh của lưới. Dòng mã đầu tiên được trình bày ở đây là giả, để tạo ra một hình ảnh có kích thước và định dạng đúng.
grey = im.convert('L')
width,height = im.size
impix = im.load()
whitepix = white.load()
greypix = grey.load()
for y in range(height):
for x in range(width):
greypix[x,y] = min(255, max(255 * impix[x,y][0]/whitepix[x,y][0], 255 * impix[x,y][2]/whitepix[x,y][3], 255 * impix[x,y][4]/whitepix[x,y][5]))
Kết quả của các hoạt động này là một hình ảnh có giá trị chủ yếu là nhất quán và có thể chuyển đổi thành màu đen và trắng thông qua một ngưỡng đơn giản.
Edit: Thật tuyệt khi nhìn thấy một cuộc thi nhỏ. nikie đã đề xuất một cách tiếp cận rất giống nhau, sử dụng phép trừ thay vì chia tỷ lệ để loại bỏ các biến thể ở cấp độ trắng.Phương pháp của tôi làm tăng độ tương phản ở các khu vực có ánh sáng yếu, và phương pháp của nikie không - phương pháp nào bạn thích sẽ phụ thuộc vào việc có thông tin trong các khu vực kém ánh sáng mà bạn muốn giữ lại hay không.
nỗ lực của tôi để tái tiếp cận này dẫn đến điều này:
for y in range(height):
for x in range(width):
greypix[x,y] = min(255, max(255 + impix[x,y][0] - whitepix[x,y][0], 255 + impix[x,y][7] - whitepix[x,y][8], 255 + impix[x,y][9] - whitepix[x,y][10]))
Tôi đang làm việc trên sự kết hợp các kỹ thuật để cung cấp một kết quả thậm chí tốt hơn, nhưng nó không hoàn toàn sẵn sàng chưa.
Làm thế nào về màu sắc? Tôi không quen với xử lý hình ảnh, nhưng có vẻ như nếu bạn xóa mọi thứ trong một sự khác biệt nhất định của màu xanh, lưới sẽ bị xóa. – Mehrdad