Понижение качества изображения по большому коэффициенту без артефактов - PullRequest
0 голосов
/ 01 марта 2019

Существует ли алгоритм изменения размера изображения Python, который может масштабировать цветные изображения по крупным факторам с минимальными артефактами?Например, с 1234x1234 до 32x32.Цель состоит в том, чтобы иметь возможность создавать высококачественные изображения размером 32x32, такие как CIFAR-10 , из очень больших изображений.

Алгоритмы изменения размера изображений OpenCV (линейное, бикубическое, lancsoz, площадь и т. Д.).) являются недостаточными, поскольку они производят много артефактов.Возможно, что-то вроде волшебного метода ядра ?

1 Ответ

0 голосов
/ 01 марта 2019

подушка изменение размера с помощью Image.LANCZOS будет использовать большое ядро ​​и не будет вызывать псевдонимы.

Например, в Википедии есть этот горизонт Чикаго:

enter image description here

https://en.wikipedia.org/wiki/File:Chicago_Skyline_Hi-Res.jpg

Это большое изображение со сложным соотношением сторон, большими плоскими участками и множеством повторяющихся мелких деталей.

Эта программа:

import sys
from PIL import Image

im = Image.open(sys.argv[1])
target_size = 256.0
horizontal_scale = im.size[0] / target_size
vertical_scale = im.size[1] / target_size
scale = max(horizontal_scale, vertical_scale)
new_size = (int(im.size[0] / scale), int(im.size[1] / scale))
im = im.resize(new_size, Image.LANCZOS)
im.save(sys.argv[2])

Запуск на оригинальном изображении с разрешением 14696x1779 пикселей дает такой результат:

enter image description here

Я сделал взрыв центральной области:

enter image description here

Вы можете видеть, что нет псевдонимов, но есть небольшие звуки, как и следовало ожидатьиз Ланцоша.

Если вместо этого вы уменьшите размер с помощью билинейного (для этого в подушке используется треугольный фильтр), вы получите более мягкий вид, но без наложения имен и звонков.Это может быть более подходящим для ввода ML.

enter image description here

Я был бы удивлен, если бы OpenCV не мог сделать это, но я незнаю это достаточно хорошо, чтобы предложить код.

...