Thursday, November 6, 2014

LSM空間

心理系の色周辺で、色をLSM空間で表現することがあります。
こういうのは自前で持っていないと面倒なことが多いので、宅の暇な時間に、OpenCVのMat用に書いてみました。

画像処理ではReinhardらのColor Transfer between imagesで使われています。
http://dl.acm.org/citation.cfm?id=618848

以下、c++コード


void BGR2LSM(cv::Mat bgr, cv::Mat& lsm){
 double trans[] = {
  0.0402, 0.5783, 0.3811,
  0.0782, 0.7244, 0.1967,
  0.8444, 0.1288, 0.0241};
 lsm = cv::Mat::zeros(bgr.size(),CV_32FC3);
 for(int i=0;i<bgr.size().height;i++){
  for(int j=0;j<bgr.size().width;j++){
   for(int k=0;k<3;k++){
    double t = 0;
    for(int l=0;l<3;l++){
     t += trans[k*3+l]*(double)bgr.at<cv::Vec3b>(i,j)[l];
    }
    lsm.at<cv::Vec3f>(i,j)[k] = t;
   }
  }
 }
}

No comments: