Я пытаюсь реализовать обработку изображений с цветовым дополнением, поскольку в 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 и наоборот.я делаю это правильно или я что-то пропустил?
Спасибо!