Tôi nhận thấy điều gì đó kỳ lạ với scipy.misc.resize - có vẻ như sử dụng bất kỳ phương thức nội suy nào khác với kết quả 'gần nhất' trong khoảng 1 x1 pixel thay đổi từ (0,0) trong hình ảnh kết quả.Thay đổi kích thước hình ảnh SciPy - hành vi hoặc lỗi dự kiến?
Dưới đây là một ví dụ hoàn toàn tổng hợp tham gia một hình ảnh 3x3 đến 6x6:
>>> src
array([[ 0., 0., 0.],
[ 0., 64., 0.],
[ 0., 0., 0.]])
>>> imresize(src, (6, 6), interp='bicubic',mode='F')
array([[ 1., 0., -5., -8., -5., 0.],
[ 0., 0., 0., 0., 0., 0.],
[ -5., 0., 25., 40., 25., 0.],
[ -8., 0., 40., 64., 40., 0.],
[ -5., 0., 25., 40., 25., 0.],
[ 0., 0., 0., 0., 0., 0.]], dtype=float32)
>>> imresize(src, (6, 6), interp='bilinear',mode='F')
array([[ 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0.],
[ 0., 0., 16., 32., 16., 0.],
[ 0., 0., 32., 64., 32., 0.],
[ 0., 0., 16., 32., 16., 0.],
[ 0., 0., 0., 0., 0., 0.]], dtype=float32)
>>> imresize(src, (6, 6), interp='nearest',mode='F')
array([[ 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0.],
[ 0., 0., 64., 64., 0., 0.],
[ 0., 0., 64., 64., 0., 0.],
[ 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0.]], dtype=float32)
Bây giờ có vẻ như trung tâm của di chuyển khối lượng cho Bilinear và interpolations bicubic, nhưng không di chuyển cho phép nội suy gần nhất. Điều này xảy ra cho cả hai kích thước đích lẻ và chẵn.
Tôi nhận ra rằng các định nghĩa khác nhau của tọa độ là pixel-center hoặc pixel-edge hoặc xử lý pixel như mẫu điểm hoặc hình chữ nhật sẽ cho kết quả hơi khác nhau trong quá trình lấy mẫu lại, nhưng điều này có vẻ như là một vấn đề lớn. .
Dưới đây là một ví dụ thể hiện sự thay đổi rõ ràng hơn:
>>> imresize(src, (7, 3), interp='bilinear',mode='F')
array([[ 0. , 0. , 0. ],
[ 0. , 0. , 0. ],
[ 0. , 11.4285717, 11.4285717],
[ 0. , 25.1428566, 25.1428566],
[ 0. , 25.1428566, 25.1428566],
[ 0. , 11.4285717, 11.4285717],
[ 0. , 0. , 0. ]], dtype=float32)
Vì không có sự thay đổi kích thước ngang xảy ra, tôi không mong chờ điều phối ngang của trung tâm của tôi về khối lượng để di chuyển ở tất cả, nhưng rõ ràng di chuyển từ từ 1,0 đến 1,5.
Vì vậy, đây có phải là lỗi hoặc tôi thiếu gì đó không?
Điều này rất thú vị. Tôi đã quan sát những thứ tương tự ngay cả trong 'PIL', nhưng không có lời giải thích ngay lập tức. Lý do của bạn về "pixel-center" và "pixel-edge" có thể là khách hàng tiềm năng (mặc dù điều này gợi ý rằng pixel là hình vuông thay vì 0d điểm), cũng như xem xét đường viền và các hiệu ứng bổ sung với thay đổi kích thước nhiều số nguyên. Rất quan tâm đến bất cứ điều gì có thể làm sáng tỏ ở đây. – eickenberg
Chỉ ra rằng scipy thực sự sử dụng 'PIL' (xem hàm' toimage' ở nơi khác trong [tệp này] (https://github.com/scipy/scipy/blob/master/scipy/misc/pilutil.py#L392)) – eickenberg