Поскольку некоторые люди в комментариях к вопросу неоднократно говорили мне, что это было довольно тривиально, я на самом деле сделал это: приложение, которое сортирует изображения в текущем каталоге, оставляя фактическое непосредственное сравнение пользователю . 1
Написан на C # для .NET 2. Также работает на Mono (пока тестировался на Linux). Требуется dcraw для PATH (скомпилированный исполняемый файл для Windows или OS X можно скачать здесь ).
В настоящее время взаимодействие с пользователем очень элементарно. Это, вероятно, может быть изменено. Кроме того, код - злой беспорядок, как обычно, с такой хакерской работой.
Приложение должно быть запущено в каталоге, содержащем изображения для сортировки. Затем происходит загрузка всех изображений, которые он может найти и обработать (JPEG, GIF, PNG, BMP поддерживаются изначально, все остальные форматы либо поддерживаются dcraw, либо пропускаются, если нет). Придерживайтесь разумного количества изображений, поскольку каждое изображение предварительно загружается в память для ускорения отображения. Я попытался запустить его в папке, содержащей около 600 изображений, и завершил ее при использовании памяти объемом около 2 ГБ.
После этого вы получите двухпанельный вид с изображением слева и справа. Нажмите на тот, который вы считаете лучшим из двух. Вы получите два новых изображения. Продолжайте, пока не закончите. Вы можете закрыть программу, если хотите, она возобновится с того места, где вы остановились.
После всех необходимых сравнений 2 результат можно увидеть:
Сортированный список изображений слева имеет самый высокий рейтинг сверху и самый низкий рейтинг снизу.
Список дел:
- Разрешить выбор изображений для сортировки.
- Решите проблему, заключающуюся в том, что портретные изображения всегда отображаются в альбомной ориентации (по крайней мере, для необработанных изображений. Dcraw позволяет вращение, но не может сделать это автоматически, и я не вижу простого способа выяснить это снаружи).
- Сократите использование памяти для большого количества изображений.
- Перетасуйте изображения заранее, чтобы пакеты почти идентичных изображений с меньшей вероятностью сравнивались непосредственно друг с другом.
- Измените синхронизацию между потоком сортировки и пользовательским интерфейсом, чтобы больше не полагаться
Thread.Sleep
и не опрашивать, а использовать надлежащие методы синхронизации.
- Добавьте предпросмотр 1: 1 (или хотя бы больший). В настоящее время это не может быть использовано для оценки вещей на уровне пикселей.
Здесь 5:26, так что я перестану взламывать это сейчас.
Исходный код можно найти в моем хранилище SVN и выпущен под лицензией MIT. Я приветствую патчи ;-)
Изображения на скриншотах выше мои.
1 Конечно, это было не так тривиально, как другие хотели бы заставить меня поверить. После долгой борьбы с Libraw я просто пошел по пути dcraw. Не красиво, но работает с минимальным количеством кода.
2 Это порядок n log 2 n, где n - это количество сравниваемых изображений - так что для 20 изображений можно ожидать что-то около 20 × 4,3 ≈ 85 сравнений - я знаю, это не маленькое число. Для 300 изображений, которые вы упомянули, вы получите около 2400. Фактическое число, которое должно быть выполнено вручную, (а) отличается (так как сложности опускают линейный коэффициент) и (б), насколько я наблюдал до сих пор, меньше. Во избежание несоответствий пользователю никогда не будет предложено дважды на одних и тех же двух изображениях (в любом порядке) и никогда не будет выдано одинаковое изображение с обеих сторон.