0

EDSDK を使用して大砲 Eos 7D を制御し、1 つの固定オブジェクトで写真を撮ります。

カメラの位置、絞り、ISO、シャッター速度、フォーカス(マニュアルフォーカス)、フラッシュランプなしなど、すべてを同じにして、すべてが変わらないように写真を撮り続けます。毎回近いRGB画像が得られることが期待されます。

しかし、キャプチャするたびに JPG 画像が異なることがわかりました。たとえば、オブジェクト ブロック全体の RGB 合計を計算します (ブロック位置は固定、背景は純粋に暗い -- ゼロ)。最初は RGB == (10000,20000,15000) を取得し、2 回目は (12000, 24000,17000)、3 回目は (9000, 18000, 13000) を取得します。写真をキャプチャする際に多少の変動やノイズが発生することはわかっています。しかし、RGB 値は毎回大幅にシフトし (-15% から 15% の差)、これはノイズではないはずです (何らかの自動調整設定が原因であると推測されます)。

なぜ異なる結果が得られるのでしょうか? どこで間違いを犯しますか?

また、raw 形式の画像 (.CR2) を取得し、dcraw.exe を使用して、同じ変換パラメーター (-v -k 2400 -S 13000 -W -g 2.222 を使用) を使用して PPM または TIFF 形式に転送します。 4.5)。ただし、画像の RGB 値は、毎回大きくシフトします。

以下は、コードのスニペットです (C# では、一部の詳細は無視されます)。

私たちの仕事は RGB 値を正確に計算することなので、この問題は私たちにとって非常に重要です。ご助力ありがとうございます !

    public void main(){

        EDSDK.EdsInitializeSDK();
        EDSDK.EdsGetCameraList(out cameraList);
        EDSDK.EdsGetChildCount(cameraList, out cameraCount);
        EDSDK.EdsGetChildAtIndex(cameraList, 0, out cam);
        EDSDK.EdsGetDeviceInfo(cam, out deviceInfo);
        EDSDK.EdsSetPropertyEventHandler(cam, EDSDK.PropertyEvent_All, propertyEventHandle, inContext);
        ObjectEventHandle = new EDSDK.EdsObjectEventHandler(ObjectEventCallBack);
        EDSDK.EdsSetObjectEventHandler(cam, EDSDK.ObjectEvent_All, ObjectEventHandle, IntPtr.Zero);
        EDSDK.EdsSetCameraStateEventHandler(cam, EDSDK.StateEvent_All, stateEventHandle, inContext);
        EDSDK.EdsOpenSession(cam);

        EDSDK.EdsSetPropertyData(cam, EDSDK.PropID_SaveTo, 0, 4, (uint)EDSDK.EdsSaveTo.Host);
        EDSDK.EdsSetPropertyData(cam, EDSDK.PropID_ImageQuality, 0, 4, (uint)0x0013ff0f);

        EDSDK.EdsSetPropertyData(cam, EDSDK.PropID_Av, 0, 4, (uint)0x58);
        EDSDK.EdsSetPropertyData(cam, EDSDK.PropID_Tv, 0, 4, (uint)0x6b);
        EDSDK.EdsSetPropertyData(cam, EDSDK.PropID_ISOSpeed, 0, 4, (uint)0x48);

        EDSDK.EdsCapacity capacity = default(EDSDK.EdsCapacity);
        capacity.NumberOfFreeClusters = 0x10000000;
        capacity.BytesPerSector = 0x0200;
        capacity.Reset = 1;
        EDSDK.EdsSetCapacity(cam, capacity);

        EDSDK.EdsSendCommand(cam, EDSDK.CameraCommand_TakePicture, 0);


    }

    public void DownloadImage(String Path, IntPtr DirItem)
    {
        uint Err = 0;

        EDSDK.EdsDirectoryItemInfo DirInfo;

        Err = EDSDK.EdsGetDirectoryItemInfo(DirItem, out DirInfo);
        if (Err != 0) throw new Exception();

        IntPtr Stream;
        Err = EDSDK.EdsCreateFileStream(Path, EDSDK.EdsFileCreateDisposition.CreateAlways, EDSDK.EdsAccess.ReadWrite, out Stream);
        if (Err != 0) throw new Exception();

        Err = EDSDK.EdsDownload(DirItem, DirInfo.Size, Stream);
        if (Err != 0) throw new Exception();

        Err = EDSDK.EdsDownloadComplete(DirItem);
        if (Err != 0) throw new Exception();

        Err = EDSDK.EdsRelease(Stream);
        if (Err != 0) throw new Exception();

        while (!System.IO.File.Exists(Path))
            Thread.Sleep(100);

    }

   public uint ObjectEventCallBack(uint Event, IntPtr Object, IntPtr Context)
    {
        switch (Event)
        {
            case EDSDK.ObjectEvent_DirItemCreated:
                foreach (EDSFileObject File in Results)
                {
                    if (File.mFileInfo.isFolder == 0)
                    {
                            DownloadImage(Filepath, File.mFilePointer);
                        }
                    }
                }
                break;
        }
        return EDSDKLib.EDSDK.EDS_ERR_OK;
    }
4

2 に答える 2

0

キャプチャ中に特定のランダム ノイズがあります。しかし、分散が高すぎると思います (15% を超える場合もあります)。これは、この状況では正常ではないはずです。

このプロジェクトの目標は、LED スクリーンの RGB ピクセルを調整することです。したがって、RGB の測定は正確でなければなりません。

同じシーンの複数のショットを平均化することも選択肢の 1 つですが、これには多くの時間がかかる可能性があり、他の LED キャリブレーション商用ソフトウェアで使用される最適なソリューションではありません。

カメラとターゲット LED シーンを固定し、すべての照明条件を暗室で制御して、光が変動しないようにします。

この現象は、以下の理由で発生する可能性があると推測されます。

  1. LED のピクセルは時間とともに変化しますが、シャッター時間は RGB 測定値を安定させるのに十分な長さですか?

絞り 32、シャッター時間 1/60、ISO 100 に設定します。カメラのパラメータ設定について何かアドバイスをいただけますか?

  1. カメラ内処理。EDSDK API ドキュメントから、 CR2->JPEG で実行される PictureStyle および WhiteBalance 操作があることがわかります。

デフォルト設定を選択します。PictureStyle => Standard、WhiteBalcne => Daylight . それらは正しい設定ですか?

  1. 最初の質問で述べたように、2 番目の点に対する別の解決策です。raw 形式 (.CR2) でキャプチャし、dcraw を使用して PPM または TIFF に変換します。同じ?
于 2013-04-28T23:50:08.147 に答える