2015-04-10 4 views
2

У меня есть набор данных изображений, который является многодиапазонным набором данных формата arff. Это выглядит следующим образом:Радиус многоканального изображения до RGB

8.3000000e+001 9.3000000e+001 9.6000000e+001 7.5000000e+001 1.0000000e+000 
8.3000000e+001 9.3000000e+001 9.6000000e+001 7.5000000e+001 1.0000000e+000 
8.3000000e+001 9.3000000e+001 9.6000000e+001 7.5000000e+001 1.0000000e+000 
8.3000000e+001 9.3000000e+001 9.6000000e+001 7.5000000e+001 1.0000000e+000 
7.4000000e+001 8.4000000e+001 8.6000000e+001 7.1000000e+001 1.0000000e+000 
7.4000000e+001 8.4000000e+001 8.6000000e+001 7.1000000e+001 1.0000000e+000 
7.4000000e+001 8.4000000e+001 8.6000000e+001 7.1000000e+001 1.0000000e+000 
7.4000000e+001 8.4000000e+001 8.6000000e+001 7.1000000e+001 1.0000000e+000 

Первые 4 атрибутов определяют многополосные значения пикселя и последний атрибут определяет метку класса. Можно ли преобразовать его в формат RGB? У меня есть java-код для классификации изображения на основе значений RGB.

ответ

3

Если я правильно, то ответ ДА ​​, но только для осветления это, как я вижу это:

Вы получили 4 диапазона интенсивности, и вам необходимо RGB значение цвета из него. Последний номер никак не связан с цветом, поэтому игнорируйте его.

  1. Что вам нужно знать

    если интенсивность является линейной или нет, и если нелинейная, как преобразовать его в линейном масштабе. Вы должны знать длину волны или RGB цвета для каждой группы использовали

  2. как конвертировать

    принимать каждый RGB бандажа и умножить ее линейной интенсивность затем суммировать их все вместе.

    color_rgb = band0_rgb*band0_intensity+...+band3_rgb*band3_intensity 
    
  3. как получить полезный RGB полосы от длины волны

    получить цвет света с длиной волны от RGB values of visible spectrum и отмасштабировать цвет, так что если вы добавите все группы вместе с той же интенсивностью, вы получите белый цвет ,

Я использую равномерно распределенные полосы через видимый спектр для нескольких спектрального рендеринга и это, как я делаю это в C++:

//--------------------------------------------------------------------------- 
//--- multi band rendering -------------------------------------------------- 
//--------------------------------------------------------------------------- 
const int _Bands=10;       // number of bands used 
double _Band_RGB[_Bands][3];     // RGB of each band with white bias correction 
double _Band_Wavelength[_Bands];    // wavelength of each band 
//--------------------------------------------------------------------------- 
void wavelength2RGB(double *rgb,double lambda) // RGB <0,1> <- lambda <400e-9,700e-9> [m] 
    { 
    double r=0.0,g=0.0,b=0.0,t; 
     if ((lambda>=400.0e-9)&&(lambda<410.0e-9)) { t=(lambda-400.0e-9)/(410.0e-9-400.0e-9); r= +(0.33*t)-(0.20*t*t); } 
    else if ((lambda>=410.0e-9)&&(lambda<475.0e-9)) { t=(lambda-410.0e-9)/(475.0e-9-410.0e-9); r=0.14   -(0.13*t*t); } 
    else if ((lambda>=545.0e-9)&&(lambda<595.0e-9)) { t=(lambda-545.0e-9)/(595.0e-9-545.0e-9); r= +(1.98*t)-( t*t); } 
    else if ((lambda>=595.0e-9)&&(lambda<650.0e-9)) { t=(lambda-595.0e-9)/(650.0e-9-595.0e-9); r=0.98+(0.06*t)-(0.40*t*t); } 
    else if ((lambda>=650.0e-9)&&(lambda<700.0e-9)) { t=(lambda-650.0e-9)/(700.0e-9-650.0e-9); r=0.65-(0.84*t)+(0.20*t*t); } 
     if ((lambda>=415.0e-9)&&(lambda<475.0e-9)) { t=(lambda-415.0e-9)/(475.0e-9-415.0e-9); g=    +(0.80*t*t); } 
    else if ((lambda>=475.0e-9)&&(lambda<590.0e-9)) { t=(lambda-475.0e-9)/(590.0e-9-475.0e-9); g=0.8 +(0.76*t)-(0.80*t*t); } 
    else if ((lambda>=585.0e-9)&&(lambda<639.0e-9)) { t=(lambda-585.0e-9)/(639.0e-9-585.0e-9); g=0.84-(0.84*t)   ; } 
     if ((lambda>=400.0e-9)&&(lambda<475.0e-9)) { t=(lambda-400.0e-9)/(475.0e-9-400.0e-9); b= +(2.20*t)-(1.50*t*t); } 
    else if ((lambda>=475.0e-9)&&(lambda<560.0e-9)) { t=(lambda-475.0e-9)/(560.0e-9-475.0e-9); b=0.7 -( t)+(0.30*t*t); } 
    rgb[0]=r; 
    rgb[1]=g; 
    rgb[2]=b; 
    } 
//--------------------------------------------------------------------------- 
double wavelength2int(double lambda)    // white bias correction intensity <0,1+> <- lambda <400e-9,700e-9> [m] 
    {            // this is mine empirically deduced equation and works for evenly distributed bands 
    const double a0= 8.50/double(_swColorWavelengths);// for 3-5 bands low bias, >5 almost no visible bias present 
    const double a1=-27.37/double(_swColorWavelengths); 
    const double a2=+26.35/double(_swColorWavelengths); 
    double t=divide(lambda-400e-9,700e-9-400e-9); 
    return (a0)+(a1*t)+(a2*t*t); 
    } 
//--------------------------------------------------------------------------- 
void init_multiband_colors()     // init evenly distributed bands through visible spectrum range 
    { 
    double l,dl; int ix; 
    l=405e-9; dl=695e-9; dl=divide(dl-l,_Bands); l+=0.5*dl; 
    for (ix=_Bands-1;ix>=0;ix--,l+=dl)   // init colors and wavelengths (multispectral rendering) 
     { 
     _Band_Wavelength[ix]=l; 
     wavelength2RGB(_Band_RGB[ix],l); 
     _Band_RGB[ix][0]*=wavelength2int(l); // white bias removal 
     _Band_RGB[ix][1]*=wavelength2int(l); 
     _Band_RGB[ix][2]*=wavelength2int(l); 
     } 
    } 
//--------------------------------------------------------------------------- 
//--------------------------------------------------------------------------- 
//--------------------------------------------------------------------------- 

Вот как это выглядит:

multi spectral colors mixing white bias

первая строка показывает число и c olor использованных полос второй является частью визуализированного изображения белого цвета с использованием мультиспектрального рендеринга. Как вы видите, есть небольшая белая предвзятость. Я делаю эту формулу как можно ближе к белому, поскольку это может быть для любого количества используемых диапазонов (>=3). Идея состоит в том, что если у вас есть белый шум (все частоты с одинаковой интенсивностью), тогда вы получите белый цвет. Поэтому, когда вы добавляете все используемые цвета колонок, вы должны иметь белый цвет. Таким образом, я эмпирически экспериментировал с масштабированием цветов по длине волны, и именно это я придумал ...

если ваши полосы распределены неравномерно

Тогда вам нужно интегрировать все равномерно распределенные полосы они покрывают так, например:

  1. набор цветов для 100 групп
  2. разделить их на ваш 4 полосы для групп
  3. интегрировать каждую группу для получения цвета полосы
  4. масштаб интегрированного диапазона колонок RS к общей используемой шкале, как /=100
  5. проверки белого смещение
+0

Спасибо you.That помогло. – Codebeginner

Смежные вопросы