Измените размер изображения, чтобы оно содержало ровно 120 пикселей, сохраняя соотношение сторон как можно ближе.

Я хочу изменить размер группы изображений до очень маленького размера, чтобы я мог выполнить на них некоторый анализ изображений. Я хочу, чтобы все они содержали одинаковое количество пикселей для моих векторных сравнений. Я выбрал "120", потому что это очень сложное. Я мог бы изменить размер каждого изображения до 12x10, но тогда может быть больше растяжения, чем необходимо для изображений, которые не имеют соотношение сторон 1,2.

Как выбрать новую ширину и высоту, наиболее точно соответствующие исходному соотношению сторон?

Для справки, делители числа 120: {1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 20, 24, 30, 40, 60, 120}, поэтому допустимыми размерами будут 12x10, 10x12, 8x15, 15x8, 6x20, 20x6 и так далее.

Изменить: 144, возможно, был бы лучшим выбором, так как он позволяет использовать квадратные изображения и популярное соотношение сторон 16:9.


person mpen    schedule 12.06.2014    source источник


Ответы (1)


Я бы реализовал что-то подобное, чтобы сохранить соотношения сторон (1:144, 2:72, 3:48, 4:36 и т. д.) в отсортированном массиве. Затем для каждого входящего изображения вычислите его соотношение сторон, затем найдите ближайшее желаемое соотношение с помощью бинарного поиска.

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

person Chris Jester-Young    schedule 12.06.2014
comment
Почему журнал? 1/120 = 0,008333333 -- точность числа с плавающей запятой прекрасно справляется с этим, не так ли? 1/144=0,006944444 не намного хуже. - person mpen; 13.06.2014
comment
Когда у вас есть соотношение сторон, которое находится между двумя возможными желаемыми соотношениями, и вы хотите выяснить, какое из них ближе, использование логарифмического означает, что вы можете сравнивать со средним арифметическим этих двух логарифмических соотношений, а не со средним геометрическим не -логарифмические отношения. Но на самом деле, любой способ хорош. - person Chris Jester-Young; 13.06.2014
comment
Ооо.. да, в этом есть смысл. Двоичный поиск даст мне самые близкие числа с обеих сторон, поэтому мне нужно сделать не более двух вычислений расстояния, чтобы найти, какое из них ближе. - person mpen; 13.06.2014