VIPS(およびPython)の16ビットTIFFファイルのさまざまな階調範囲にさまざまな変換を適用する必要があります。私はそうすることができましたが、私はVIPSの初心者です。私はこれを効率的にやっているとは確信していません。これらの画像はそれぞれ数百メガバイトで、余分なステップを1枚にすると、1画像あたり数秒間節約できます。VIPS/Pythonで特定の階調範囲に変換を適用する方法
ルックアップテーブルを使って、以下のコードから取得したのと同じ結果を得るより効率的な方法があるのだろうかと思います(VIPSでどのように動作するのか分かりません)。コードは赤いチャンネルの影を分離し、それらを変換を通して渡します。
im = Vips.Image.new_from_file("test.tiff")
# Separate the red channel
band = im[0]
# Find the tone limit for the bottom 5%
lim = band.percent(5)
# Create a mask using the tone limit
mask = (band <= lim)
# Convert the mask to 16 bits
mask = mask.cast(band.BandFmt, shift = True)
# Run the transformation on the image and keep only the shadow areas
new_shadows = (65535 * (shadows/lim * 0.1)) & mask
各色調範囲(ハイライト、シャドウ、中間調のために多かれ少なかれ同様のコードを実行した後、私は元のバンドを再構築するために一緒にすべての結果の画像を追加します。
new_band = (new_shadows.add(new_highlights).add(new_midtones)).cast(band.BandFmt)
はい、あなたはかなり迅速にそれを作ることができるはずです。
あなたはそれ以上の質問がある場合libvipsトラッカー上の問題を開いてください。たとえば、バンドごとに1回、「パーセント」を3回実行していますか?代わりに、最初に画像のヒストグラムを見つけて分析し、各バンドのパーセントを取得します。私たちが実行しようとする小さな完全な例を投稿してください。編集:あなたが言っているように、もちろんLUTを使うこともできます。これは別の大きなスピードアップをもたらすはずです。 – user894763