Поскольку некоторые люди в комментариях к вопросу неоднократно говорили мне, что это было довольно тривиально, я на самом деле сделал это: Приложение, которое сортирует изображения в текущем каталоге, оставляя фактическое непосредственное сравнение пользователю . 1
Написано на C # для .NET 2. Также работает на Mono (до сих пор тестировалось на Linux). Требуется dcraw для PATH (скомпилированный исполняемый файл для Windows или OS X можно загрузить здесь ).
В настоящее время взаимодействие с пользователем очень элементарно. Это, вероятно, может быть изменено. Кроме того, код - это, как обычно, злой беспорядок при такой хакерской работе.
Приложение должно быть запущено в каталоге, содержащем изображения для сортировки. Затем происходит загрузка всех изображений, которые он может найти и обработать (JPEG, GIF, PNG, BMP поддерживаются изначально, все остальные форматы либо поддерживаются dcraw, либо пропускаются, если нет). Придерживайтесь разумного количества изображений, поскольку каждое изображение предварительно загружается в память для ускорения отображения. Я попытался запустить его в папке, содержащей около 600 изображений, и завершил ее при использовании памяти около 2 ГиБ.
После этого вы получите двухпанельный вид с изображением слева и справа. Нажмите на тот, который вы считаете лучшим из двух. Вы получите два новых изображения. Продолжайте, пока не закончите. Вы можете закрыть программу, если хотите, она возобновится с того места, где вы остановились.
![Comparison view](https://i.stack.imgur.com/pj1Er.jpg)
После всех необходимых сравнений 2 можно увидеть результат:
![Result view](https://i.stack.imgur.com/Q9OIn.jpg)
Сортированный список изображений слева имеет самый высокий рейтинг сверху и самый низкий рейтинг снизу.
Список задач:
- Разрешить выбор изображений для сортировки.
- Решите проблему, заключающуюся в том, что портретные изображения всегда отображаются в альбомной ориентации (по крайней мере, для необработанных изображений. 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. Фактическое число, которое должно быть выполнено вручную, (а) отличается (так как сложности опускают линейный коэффициент) и (б), насколько я наблюдал до сих пор, меньше. Во избежание несоответствий пользователю никогда не будет предложено два раза для одних и тех же двух изображений (в любом порядке) и никогда не будет выдано одинаковое изображение с обеих сторон.