質問のコメントの何人かの人々がそれをかなり些細なことであると繰り返し言ったので、私は実際にそれをしました:実際の直接比較をユーザーに任せることによって現在のディレクトリの画像をソートするアプリケーション。1
C#for .NET 2で書かれています。Mono(これまでLinuxでテスト済み)でも動作します。PATHにdcrawが必要です(WindowsまたはOS X用のコンパイル済み実行可能ファイルは、ここからダウンロードできます)。
現在、ユーザーとの対話は非常に初歩的なものです。これはおそらく変更される可能性があります。また、このようなハックジョブでは、コードは通常の邪悪な混乱です。
並べ替える画像を含むディレクトリでアプリケーションを起動する必要があります。次に、検索および処理できるすべての画像の読み込みに進みます(JPEG、GIF、PNG、BMPはネイティブでサポートされ、他のすべての形式はdcrawでサポートされるか、サポートされない場合はスキップされます)。表示を高速化するためにすべての画像がメモリにプリロードされるため、画像の数を適切に保ちます。約600個の画像があるフォルダーで開始し、約2 GiBのメモリ使用量で終了しました。
その後、左右に画像がある2ペインビューが表示されます。2つの中で最も良いと思うものをクリックしてください。その後、2つの新しい画像を取得します。完了するまで続けます。必要に応じてプログラムを閉じることができ、中断したところから再開します。
必要なすべての比較が行われた後2結果が見られます:
左側に画像のソートされたリストがあり、最上位が最上位、最下位が最下位です。
Todoリスト:
- 並べ替える画像の選択を許可します。
- ポートレート写真が常に横向きで表示されるという問題を解決します(少なくとも生の画像の場合。dcrawは回転を許可しますが、自動的に回転できないため、外部から簡単に見つける方法がわかりません)。
- 多数の画像のメモリ使用量を削減します。
- 事前に画像をシャッフルして、ほぼ同一の画像のバーストが互いに直接比較される可能性を低くします。
- ソートスレッドとUI間の同期を変更して
Thread.Sleep
、ポーリングに依存せず、適切な同期方法を使用するようにします。
- 1:1プレビュー(または、少なくとも大きいプレビュー)を追加します。現在、これを使用してピクセルレベルで物事を判断することはできません。
ここは5:26ですので、ハッキングをやめます。
ソースコードは私のSVNリポジトリにあり、MITライセンスの下でリリースされています。パッチを歓迎します;-)
上記のスクリーンショットの画像は私自身のものです。
1もちろん、他の人が私に信じさせたいほど些細なことではありませんでした。Librawとの長い闘争の後、私は単にdcrawルートに行きました。きれいではありませんが、最小限のコードで動作します。
2これは、n log 2 nのオーダーです。ここで、nは比較する写真の数です。したがって、20枚の写真では、20×4.3≈85の比較が予想されます。手動で実行しなければならない実際の数は、(a)異なる(複雑さが線形係数を省略しているため)、および(b)私がこれまで観察した限りでは小さい。矛盾を避けるために、ユーザーは同じ2つの画像(どちらの順序でも)で2回プロンプトが表示されることはなく、両側で同じ画像でプロンプトが表示されることもありません。