Проблема преобразования HSI в цветовое пространство RGB и наоборот - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь реализовать обработку изображений с цветовым дополнением, поскольку в opencv нет преобразования цветов rgb в hsi, я должен сделать это сам, к сожалению, я обнаружил проблему.

Вот фрагмент кода, в котором япопробуйте конвертировать rgb в hsi

for( i = 0 ; i < src.rows ; i++){
for( j = 0 ; j < src.cols ; j++){
  var pixel = src.ucharPtr(i,j);
  r = pixel[0];
  g = pixel[1];
  b = pixel[2];


  intensity = (b+g+r)/3;
  var min_val = Math.min(r,g,b);
  s = 1 - 3*(min_val/(b + g + r));
  if(s < 0.00001)
    {
          s = 0;
    }else if(s > 0.99999){
          s = 1;
    }

  if(s != 0)
  {
    h = 0.5 * ((r - g) + (r - b)) / Math.sqrt(((r - g)*(r - g)) + ((r - b)*(g - b)));
    h = Math.acos(h);


    if(b <= g)
      {
        h = h;
      } else{
        h = 360 - h;
      }
  }

  pixel[0] = h;
  pixel[1] = s;
  pixel[2] = intensity;

и вот код, в котором я пытаюсь преобразовать его обратно в rgb

for(i = 0 ; i < src.rows ; i++){
for(j = 0 ; j < src.cols ; j++){
  var pixel = src.ucharPtr(i,j);
  h = pixel[0];
  s = pixel[1];
  intensity = pixel[2];
  if(h < 120){
    b = intensity*(1-s);
    r=intensity*((1.0+((s*Math.cos(h))/(Math.cos(60-h)))));
    g=1-(r+b);
  }
  else if(h < 240){
    h -= 120;
    r=intensity*(1-s);
    g=intensity*((1.0+((s*Math.cos(h))/(Math.cos(60-h)))));
    b=1-(r+g);
  }
  else{
  h=h-240;
  g=intensity*(1-s);
  b=intensity*((1.0+((s*Math.cos(h))/(Math.cos(60-h)))));
  r=1-(g+b);

  }
  pixel[0] = r;
  pixel[1] = g;
  pixel[2] = b;

}

}

Исходное изображение

Изображение HSI

Обратное изображение

Я только что следовал алгоритму RBGtoHSI и наоборот.я делаю это правильно или я что-то пропустил?

Спасибо!

...