фон
Вот algorithm used by Matlab's built-in method rgb2gray():
rgb2gray() преобразует значения RGB в gra yscale значения путем формирования взвешенной суммы R, G и B компоненты:
0,2989 * R + 0,5870 * G + 0,1140 * В
Обратите внимание, что это те же веса, используемые rgb2ntsc функции для вычисления Y-компонента.
Обратите внимание, что у нас есть один множитель для каждого из цветовых каналов, что делает жизнь легкой.
Решение
Обратное отображение является нелинейным проблемно не существует единого набора RGB весов, которые могут принять вас от цвета обратно в серый цвет. У вас также нет гарантии, что в цветовой карте jet
содержатся все цвета, используемые на изображении.
Вот лучшие усилия обходной путь, который отображает цвета до ближайшего цвета в палитре:
%% Define the transformation as a non-uniform 3D interpolation
resolution = 512;
cmap = jet(resolution);
x = cmap(:,1);
y = cmap(:,2);
z = cmap(:,3);
intensity = gray(resolution);
intensity = intensity(:,1);
fx = TriScatteredInterp(x,y,z,intensity,'nearest');
%% Load our image, then interpolate from RGB to Grayscale intensity
img = double(imread('image.jpeg'))/255.0;
imgOut = fx(img(:,:,1),img(:,:,2),img(:,:,3));
imshow(imgOut)
выполнения является функцией разрешения палитрой, разрешение = 512 занимает около минуты, разрешение = 64 занимает около 5 секунд. Это медленно по двум причинам. Во-первых, мы выполняем нелинейный поиск для каждого пикселя (вместо применения линейного преобразования). Во-вторых, интерполяция рассеивается (а не определяется равномерно), что еще больше замедляет работу.
Входной
Выход с разрешением палитрой = 64
Выход с разрешением палитрой = 512
вы можете найти функцию отображения струи в струе.m в вашем каталоге matlab. или введите «edit jet» в окне команд; если у вас есть возможность применить/отредактировать сопоставление. – Cici