問題タブ [libraw]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2163 参照

c++ - Libraw は、Nikon 独自のコンバーターと比較して、私の画像を明るくしすぎています

ニコン独自のツールとフォトショップには、撮影した画像を開くオプションがあるようです。

しかし、libraws dcraw プロセッサを使用すると、これを理解できません。

これが私の実装です。

私が話していることを示すために画像を更新しました。画像は何らかの形で正規化されています。元の画像に明るいマテリアルの広い領域が含まれている場合、画像全体がより暗くなります。生の画像データを読み取って、opencv で独自の方法で正規化または処理できるようにしたいと考えています。

ここに画像の説明を入力

アップデート

コメントに基づいて明るさを調整しましたが、ピクセルの色の値に問題が発生しました。ここで最もよく見られます。

ここに画像の説明を入力

左がlibraw、右がviewnxの結果です。libraw 画像にノイズ カラーが含まれているようです。

0 投票する
2 に答える
7258 参照

python - Python rawkit RAWファイルからメタデータ値を読み取る方法は?

私はPythonスクリプトを書いていて、生の写真ファイル(.CR2など)からexif情報を取得する必要があります。

私は、Python Rawkitがそれを行う機能を提供していることを発見しました。

しかし、私は少し混乱しています。この値をどのように読むのですか?. たとえば、 100/200/400 のようなiso値を期待していますが、-1.182978841800441e +38とは何ですか?

私の質問はISOに固有のものではなく、シャッター、絞りなどにも当てはまります...

librawとrawkitのドキュメントを確認しましたが、この種の値を読み取ったり変換したりする方法を見つけることができませんでした。

ドキュメントのこの部分はあまり詳しくありません:

これらの値の読み方を理解できる人はいますか?

ありがとう

[アップデート]

neo が示唆するように、ExifRead を使用します。実際、それはより良い選択です。私は python スクリプトを書いています。ExifRead を使用すると、追加の C ライブラリ依存関係は必要ありません。

Canon RAW ファイルを開いて Exif を解析することはできましたが、残念ながら絞りの値が正しくありません。

クイックアンサー: Fnumber フラグを使用する

長い答え(私が見つけた/デバッグした方法):

この優れたリンクを読んで、Canon RAW.CR2ファイルに何が保存されているか、どのように、そしてなぜ(http://lclevy.free.fr/cr2/)私は自分自身を解読し、何が起こっているのかを知ることにしました.

このリンクは、raw ファイルcr2_poster.pdfをデコードするために私をグラールに送ります。それ から、最高の値は、FNumber 値に関する私のキヤノン固有の MakerNote セクションにあるように思われます。(すべての値の説明はここcanon_tags )

ファイルを Hexa エディター (hexedit) で開いたところ、完全に道に迷ってしまいました。

重要事項 :

  • オフセットは、値を含むファイル内のアドレスです。
  • 読み取り:C8 05ファイル内を読み取る必要があります05C8。オフセットの例、アドレスは0x5C8

これで、MakeNote セクションは簡単です。

簡単な方法は、MakerNoteセクションのアドレスを含む0x927c MarkerNote(ファイル内の)フラグを直接検索することです。7C 92それが見つからない場合は、IFDセクションを参照して を見つけてEXIF subsectionください。そして、そのサブセクションにはMakerNoteセクションがあります

オフセット : 84 03 00 00-> 00 00 03 84(0x384アドレス)

このアドレスに移動し、MakerNote セクションで検索します。FNumber 0x3

オフセットに移動して0x5C8値を見つけます (カウント 4 x タイプ 3 ushort、16 ビット)

そして...失敗します。実際、私のカノンはこのセクションを埋めていません。

http://www.exiv2.org/tags.htmlを読むFNumber は EXIF サブセクションにあります。

同じプロセスを実行して、EXIF サブセクションとタグ「0x829d Exif.Image.FNumbertype 5 Rational」を見つけます。有理型は 64 ビット (分子と分母の ulong) で構成されます

そして、0x334オフセットを読み取ります

16 進数で読めるように : 0x1C/ 0XA 10 進数で計算します : 28/10= 14/5=2.8

ExifRead にこの値があることを確認します

そして出来上がり!

floatを探していましたが2.8、この値は分数形式で保存されます。したがって、ライブラリは計算を行わず、分数を単純化するだけです。

これが、期待どおり14/5ではなく、そうでない理由2.8です。

0 投票する
3 に答える
1894 参照

c++ - cv::Mat::data が常に uchar を指しているのはなぜですか?

LibRaw を使用して NEF ファイルを読み取り、それを cv::Mat に入れようとしました。NEF ファイルはデータを 12 ビットとして格納します。これは、16 ビットが必要であることを意味するため、次のように CV_16UC4 を使用する必要があります。

libraw はデータを ushort*[4] として保存するので、これでうまくいくはずだと思いました:

また、ushort から uchar への変換が行われるため、データが失われる可能性があるというビルド エラーが発生します。

0 投票する
1 に答える
1269 参照

c++ - LibRaw と OpenCV

Canon EOS1200Dを使っています。このカメラは、解像度 5184 x 3456 の JPEG ファイルを作成します。カメラは CR2 ファイルも作成します。

LibRaw を使用してこのファイルを開きます。

プログラムをデバッグすると、次のことがわかります。

1/ 5184 x 3456 の解像度が表示されないのはなぜですか?

次のように、processor.tiff_ifd にも 4 つのオブジェクトが表示されます。

2/ これらの 4 つのオブジェクトは何をしますか?

3/ 次の文の意味がわかりません:

行う。RGBG 形式から RGB 形式に変換しますか?

今、私は 5184 x 3456 の解像度で精度を失うことなく cv::Mat を作成したいと思います。

4/ では、CR2 ファイルを CV_16UC3 形式の cv::Mat に変換するにはどうすればよいですか?

いくつかの CR2 ファイルから、平均的な新しい画像を作成したいと思います。

5/ では、CV_16UC3 形式の cv::Mat がある場合、精度を落とさずにファイルに保存するにはどうすればよいですか?

ありがとうございました。

編集

わかりましたので、使用する必要があります:

しかし、JPEG解像度を使用するように指定するにはどうすればよいですか? 私はそれがあると思います:

しかし、ハードコーディングせずに JPEG 解像度を指定するにはどうすればよいでしょうか?

0 投票する
0 に答える
240 参照

javascript - libraw を依存関係としてコンパイルしようとする Node-gyp

node.js プロジェクトの依存関係として libraw をコンパイルしようとしています。

2 つの異なる .gyp ファイルが./binding.gypあります。./vendor/raw.gyp

現在のバージョンの libraw とデモザイキング パックをダウンロードしました。それらはすべて次の./vendor/フォルダにあります。

ここに私の2つのgypファイルがあります:

./binding.gyp

./vendor/raw.gyp

問題は、ライブラリをコンパイルしようとするnode-gyp configure buildと、次のエラーが発生することです。

完全な出力は次のとおりです。

プロジェクトの URL: https://github.com/m0g/node-libraw/tree/batteries

ありがとう

0 投票する
1 に答える
1111 参照

image - LibRaw を使用して CR2 画像を正しくデコードしますか?

私の最終的な目標は、複数のカメラからの CR2 画像をデコードしてデスクトップ GUI に表示することです。

LibRaw 画像デコード ライブラリを使用して、サンプル プロジェクトを使用して CR2 画像を .TIFF ファイルにデコードしようとしました。

jpg サムネイルとしての元のファイルは次のとおりです。

画像1

また、デコードして .TIFF に保存した後の元の CR2 は次のとおりです。

画像2

ご覧のとおり、結果はわずかに明るく黄色がかっています。

サンプル プロジェクトには、画像をデコードするための次のパラメーターが含まれていました。

ホワイトバランス(-w)、補間品質(-q N)、埋め込みカラーマトリックス(+M)など、サムネイルの画像を複製するさまざまなオプションを試しました。ホワイトバランスをとったところ、黄ばみが取れて明るい画像になりました。次に、自動ブライトニング (-W) を無効にすると、黄色以外の画像が生成されましたが、サムネイルよりもはるかに暗い画像が生成されました。

CR2 をサムネイルのような高品質の画像 (色、明るさなど) にデコードするには、どの画像デコード パラメータを使用すればよいですか?

0 投票する
0 に答える
2738 参照

c++ - OpenCV を使用した Canon CR2 イメージのディベイヤー

私がやろうとしているのは、Canon Rebel T5 1200D で撮影した .cr2 RAW ファイルを読み取ることです。LibRaw と OpenCV を使用して画像を読み込んで表示することはできますが、Windows でファイルを開いたときよりも、画像が少し明るすぎて黄色がかっているように見えます。画像自体は投稿の下部にあります。同様の質問がいくつか寄せられています。

LibRaw を使用して CR2 画像を正しくデコードしますか?

OpenCV を使用して 12 ビット Bayer イメージを 8 ビット RGB に変換する

最初にすべてのコードを投稿してから、問題の詳細に入ります。

まず、LibRaw を使用して生の画像ファイルを開いて解凍しました。LibRaw の Web サイト http://www.libraw.org/docs/API-overview-eng.htmlのこの例

各ピクセルが実際の 4 つの ushort 値 [赤、緑 1、青、緑 2] であり、そのピクセルのベイヤー色を表す「画像」が残ることを示します。値を出力すると(次のコードを使用)

次の結果が得られます。

そのため、偶数行では Red と Green1 ピクセルが交互にゼロ以外の値を持ち、奇数行では Blue と Green2 ピクセルが交互にゼロ以外の値を持ちます。私はそれについて100%ではありませんが、値は12ビットのようです。

OpenCVのcvtColor関数の説明を見ると

http://docs.opencv.org/2.4/modules/imgproc/doc/miscellaneous_transformations.html#cvtcolor

cr2カラーフォーマットのいくつかのこの人の説明と同様に:

http://lclevy.free.fr/cr2/#interpol

「BG」の種類のベイヤー画像を取得したことを示しています (OpenCV ドキュメントで使用されている用語を使用します)。

したがって、その画像を cvtColor に渡すには、展開された生の画像から各ピクセル値を取得し、署名されていない short の連続した画像を作成する必要があります。// ピクセル idx を取得 int idx = y * width + x;

short の連続バッファー (vBayerData) を取得したら、opencv マットを作成し、CV_BayerBG2RGB を使用してデベイヤーします。

ただし、出力したピクセル値を見ると、値がおそらく 12 ビットであることがわかります (完全にはわかりませんが)。したがって、12 ビットの範囲から 16 ビットの範囲に移行する必要があると思います。値を 16 倍することになります。

結局のところ、ここに私が残した画像があります: OpenCV 出力

ただし、これが私の目に見えるものです(スケーリングについては申し訳ありません、色が重要です):

Windows での表示

ここにとても近づいているように感じますが、得られた画像は少し明るすぎて、色が少しずれています。私のカメラの設定は、sRGB 形式を使用して RAW 画像をエクスポートすることになっているため、画像強度に何らかのガンマ補正を適用すると役立つと確信していましたが、正しい画像を取得できないようです。

さまざまなベイヤー行列 (つまり RG)、さまざまなビット深度変換、ビット深度変換を行うときの再配置 (DeBayering の前後) を試しましたが、画像が正しく表示されるようには見えません。

この種の変色を認識する人はいますか?もしそうなら、彼らは私のコードでエラーを見つけるのを手伝ってくれますか?

読んでくれてありがとう、

ジョン

PS ここにはたくさんのテキストがあることは知っていますが、このような投稿に最適な形式が何であるかはわかりませんでした. 私が扱っているすべての情報を提供したかっただけです。

編集: Mark Ransom が以下で提案したように、これはホワイト バランスが正しくないためだと思います。私はデジタル カメラのカラー パイプラインの方向性を指摘されましたが、画像のデコードにはディベイヤー ステップだけではありません。

ウィキペディアの記事から:

典型的なコンポーネントには、イメージ センサー補正 (「デベイリング」またはベイヤー フィルターの適用を含む)、ノイズ リダクション、イメージ スケーリング、ガンマ補正、イメージ エンハンスメント、色空間変換 (RGB、YUV、YCbCr などのフォーマット間)、クロマ サブサンプリング、フレームレート変換、画像圧縮/ビデオ圧縮 (JPEG など)、およびコンピューターのデータ保存/データ転送。

0 投票する
0 に答える
1340 参照

python - rawpyでpicamera raw画像をデモザイクする方法は?

Pi NoIR カメラからの長時間露光をスタックしようとしています。

picamera raw 形式は、例に基づいて numpy 配列にアンパックできます: http://picamera.readthedocs.io/en/release-1.10/recipes2.html#raw-bayer-data-captures

この numpy 配列を rawpy ( https://github.com/letmaik/rawpy ) 画像に変換して後処理およびデモザイクするにはどうすればよいですか?

0 投票する
0 に答える
171 参照

c++ - Libraw - Libraw を使用して赤いピクセルだけで画像を取得するにはどうすればよいですか?

生の画像ファイルを操作するプロジェクトにLibrawを使用しています。生ファイルから、赤のピクセル (および青、緑、緑 2 ピクセルの他の 3 つの画像) だけで画像をエクスポートする必要があるという機能を実装する必要があります。4 チャンネルのサンプルを試してみましたが、黒とグレースケールの画像しか得られませんでした。画像をエクスポートする前に、これでコードを変更しようとしました:

これにより、赤ではないピクセルに黒い点があるグレースケール画像が得られます。赤い色がはっきり見える画像が欲しいです。

誰でもこの問題を解決できますか?

よろしくお願いします

0 投票する
1 に答える
622 参照

c - LibRaw(c++)を使ってCR2画像の生データを取得する方法

LibRaw は、デジタル フォト カメラ (CRW/CR2、NEF、RAF、DNG、MOS、KDC、DCR など。実質的にすべての RAW 形式がサポートされています) から RAW ファイルを読み取るためのライブラリです。LibRaw を使用して Canon CR2 画像の生データを取得する方法を知りたいです。

これは RAW データのデータ構造です。最も原始的なデータがどの構造に格納されているかはわかりません。