3

同じカメラで 2 つの異なる照明条件で撮影された同じオブジェクトがあります。

2 番目の写真では A' になる赤色のコンポーネント A の彩度を取得するとします。

白い文字の彩度が B であることがわかっている場合、どうすれば B' の適切な推定値を取得できますか? それらは依存性を持っているように見え、実際には単純な数学的依存性を持っている可能性があることは直感的ですが、私は間違っているかもしれません.

簡単に言うと、元の画像の赤と灰色の文字の彩度と、2 番目の画像の赤色の彩度がある場合に、2 番目の画像の灰色の文字の予想される彩度を見つけます。A、A'、B は 0 から 1 になります。

この方程式を 3 つの HSV チャネルに分けることはできますか? または、どのような変換を行う必要がありますか?

現在のコードは、ピボット ポイント (デフォルトでは 1) を中心に正規化していますが、B がゼロに近づくと失敗することがわかりました。

float delta1 = (A - pivotpoint);
float delta1new = Aprime - pivotpoint;
float ratio = delta1new / delta1;
float delta2 = B - pivotpoint;
float delta2new = abs(ratio * delta2);
float Bprime = pivotpoint - delta2new;

ここに画像の説明を入力

4

2 に答える 2

1

あなたが何をしたいのか理解できませんでした。しかし、私が間違っていなければ、チャネルを HSV ではなく HSL に分割して、ルミナンスに取り組むべきだと思います。

    #include "opencv2/opencv.hpp"


    int main(int ac, char **av){

      cv::Mat src = cv::imread("./files/lena.jpg", -1);
      cv::Mat hls;
        // 3 チャンネルと色相で hsv 画像を作成し、1 チャンネルで sat e val を作成します。すべて同じサイズで
      std::vector hlsChannels;

        // 赤緑青から色相彩度輝度に変換
      cv::cvtColor( src, hls, CV_RGB2HLS );
      cv::split(hls, hlsChannels);

      cv::マット色相 = hlsChannels.at(0);
      cv::Mat lum = hlsChannels.at(1);
      cv::Mat sat = hlsChannels.at(2);
      for (int y = 0; y (y, x) += 20;
        }
      }
      hlsChannels.clear();
      hlsChannels.push_back(色相);
      hlsChannels.push_back(lum);
      hlsChannels.push_back(sat);
      cv::Mat HLSColors;
      cv::Mat RGBColors;
      cv::merge(hlsChannels, HLSColors);
      cv::cvtColor(HLSColors, RGBColors, CV_HLS2RGB);
      cv::imwrite("lumLena.png", RGBColors);
      0 を返します。
    }

さらに、作業の最初のステップとなるヒストグラムの均等化を確認してください。

http://docs.opencv.org/doc/tutorials/imgproc/histograms/histogram_equalization/histogram_equalization.html#histogram-equalization

それが役に立てば幸いです!

于 2013-05-10T14:03:22.940 に答える
0

まず、探している関係をどのようにモデル化するかを考える必要があります。これを行うには、画像を手動で可能な限り一致させ、関心のある情報の散布図を調べます。つまり、ピクセルの彩度(または他の値、以下を参照)を座標として使用して2Dポイントをプロットします. これにより、適切なモデルのアイデアが得られるはずです。

露出マッチングに関する私の経験から、線形モデルは単純な加法的または乗法的モデル (または)A' = m*A + xよりもうまく機能すると思います。ただし、線形モデルを解くには、少なくとも 2 つの対応する値が必要です。より多くを使用して、最小二乗法で解決することをお勧めします。多項式の使用を検討することもできます。散布図で最もよく適合することがわかります。A' = A + xA' = m*A

HSV を使用する代わりに、R、G、B チャンネルに個別に補正を適用することも検討します。RGB は数学的に処理するのがはるかに簡単で、多くの場合、同様に良い結果が得られます。HSV では、基本的に円筒座標系で操作しますが、RGB は単純なベクトル空間です。

于 2013-05-12T20:43:38.833 に答える