Nhiệm vụ của bạn là viết một chương trình lấy hình ảnh đầu vào và chạy nó thông qua phát hiện cạnh để trở thành hình ảnh đầu ra.
Phát hiện cạnh hoạt động như sau (nếu không rõ ràng, xem phát hiện cạnh sobel ):
- Giá trị cho một pixel là tổng độ sáng của một pixel, vì vậy nếu nó có màu, trước tiên bạn cần chuyển đổi nó thành thang độ xám (để giữ cho mọi thứ đơn giản và có thể chơi gôn, bạn có thể lấy giá trị trung bình cho R, G và B).
- Các công thức cho G x và G y cho pixel p (i, j) là:
- G x = -1 * p (i-1, j-1) - 2 * p (i-1, j) - 1 * p (i-1, j + 1) + 1 * p (i + 1, j -1) + 2 * p (i + 1, j) + 1 * p (i + 1, j + 1)
- G y = -1 * p (i-1, j-1) - 2 * p (i, j-1) - 1 * p (i + 1, j-1) + 1 * p (i-1, j +1) + 2 * p (i, j + 1) + 1 * p (i + 1, j + 1)
- Giá trị cho kích thước của cạnh tại pixel đó là: (G x 2 + G y 2 )
Hình ảnh đầu ra là cho mỗi pixel kích thước của cạnh (G x 2 + G y 2 ) dưới dạng thang độ xám.
Tiền thưởng:
- Thực hiện làm mờ gaussian để làm mịn hình ảnh trước khi phát hiện cạnh, để bỏ qua mọi cạnh nhỏ hơn. Điều này mang lại tiền thưởng -30% cho kết quả cuối cùng.
- Lấy góc của cạnh trong tài khoản. Bạn cung cấp cho pixel đầu ra một số màu, bằng cách lấy cùng một giá trị thang độ xám và thêm màu từ bánh xe màu bằng góc thu được từ công thức arctan (G y / G x ). Điều này mang lại một phần thưởng khác là -30% cho kết quả cuối cùng.
Quy tắc:
- Bạn có thể bỏ qua giá trị cho các edgepixels và đặt chúng thành màu đen hoặc bạn có thể sử dụng 0 cho bất kỳ pixel nào bên ngoài hình ảnh.
- Hình ảnh ouput của bạn phải ở định dạng hình ảnh có thể được mở trên hầu hết các máy tính.
- Đầu ra phải được ghi vào đĩa hoặc có thể chuyển thành tập tin.
- Đầu vào được đưa ra dưới dạng đối số dòng lệnh, dưới dạng một đường dẫn tương đối đến hình ảnh hoặc được lấy từ dòng lệnh.
- Đây là mã golf, vì vậy mã ngắn nhất trong byte thắng!