Я новичок в обработке изображений MATLAB, и в настоящее время у меня есть два изображения: один - это изображение в градациях серого, а второе - масштабированное изображение, сгенерированное из MATLAB с использованием функции imagesc. Я пытаюсь наложить это масштабированное изображение поверх моего изображения в оттенках серого, чтобы получить пространственное разрешение для более простого наблюдения. Прилагаются два изображения:Наложение MATLAB Масштабированное изображение в оттенки серого Изображение для выбранных пикселей
A) Grayscale изображения:
B) Чешуйчатый Изображение:
Были несколько трудностей, с которыми я столкнулся. Во-первых, масштабирование изображения не сохраняются в тех же размеров пикселя, но я могу обойти, что с помощью функции imwrite:
im = imagesc(ScaledDiff);
imwrite(get(im,'cdata'),'scaleddiff.tif')
Однако это приведет к потере Colorbar и палитрой. Во-вторых, даже если мне удастся уменьшить масштабированное изображение до размера изображения в градациях серого, наложение его по-прежнему является проблемой. В идеале я хотел бы установить прозрачность (или «альфа») на 0 для этих пикселей с < 0,02 при масштабированном значении изображения.
Любая идея о том, как это сделать, будет принята с благодарностью! Извините, если я не понял!
UPDATE: Благодаря Rotem, мне удалось наложить изображение в оттенках серого и определенную область моей тепловой карты:
Однако, мне нужно, чтобы отобразить Colorbar, соответствующей значения тепловой карты, поскольку в противном случае информация теряется и наложение будет бесполезным. Как мне это сделать? Ниже приведен фрагмент моего кода, где ScaledIntDiff содержит значение от 0 до 0,25, что отображается на тепловой карте:
Brightfield = imread('gray.jpg'); % read background image
I1 = ind2rgb(gray2ind(Brightfield), gray); % convert indices into RGB scale
scale = 1000;
ScaledIntDiff2 = round(ScaledIntDiff.*scale);
I2 = ind2rgb(ScaledIntDiff2, jet(256)); % this is for the heatmap
threshold = 0.02;
I2R = I2(:,:,1); I2G = I2(:,:,2); I2B = I2(:,:,3);
I1R = I1(:,:,1); I1G = I1(:,:,2); I1B = I1(:,:,3);
% Replace pixels in I2 with pixels in I1 if the value of ScaledIntDiff of those pixels is below the threshold
I2R(ScaledIntDiff<threshold) = I1R([ScaledIntDiff<threshold]);
I2G(ScaledIntDiff<threshold) = I1G([ScaledIntDiff<threshold]);
I2B(ScaledIntDiff<threshold) = I1B([ScaledIntDiff<threshold]);
I2(:,:,1) = I2R; I2(:,:,2) = I2G; I2(:,:,3) = I2B;
figure
imshow(I2)
Я знаю, что код выше будет крайне неэффективным, поэтому предложения о том, как улучшить это будет очень приветствуется. Спасибо!
Первая рекомендация: не используйте 'imagesc', создать RGB изображение с помощью 'ind2rgb'. Пример: 'I = imread ('cameraman.tif'); J = ind2rgb (I, parula (256)); imshow (J)'. – Rotem
Если вам все еще нужно изменить размер изображения, используйте: 'imresize'. – Rotem