MATLAB Colormap医学影像热力图的叠加显示

效果图演示

先进行叠加前后的结果效果图展示:(完整代码示例见文章末尾处)

目录

叠加步骤:

(1)灰度图与colormap图像绘制

 (2)对两图像的imshow()进行提取,并保存为RGB格式图像

(3)对新的RGB图像掩膜处理,并叠加显示得到新的图像

代码汇总与注意:

附录——(用于colormap绘图)存放cmap的txt文档示例:


叠加步骤:

(1)灰度图与colormap图像绘制

对获得已有的灰度图像并进行绘制,以及基于MATLAB的colormap可以绘制彩色的医学影像热力图(其中热力图的colormap是自己编写的txt文档,也可以使用matlab自带的color)如下所示:

 (2)对两图像的imshow()进行提取,并保存为RGB格式图像

        将两副显示出来的图像通过imshow()的白色边框消除参数消除白框显示,另外通过getframe获得当前显示的框架,将框架内的RGB矩阵另存为新的图像。

%%
% cmap为提前准备好的色彩条(由蓝到红色)
% color矩阵是彩色条矩阵
% bg为灰度图像矩阵

figure;
imshow(bg,[],'Border','tight', 'initialmagnification','fit');  %无白色边框显示
Frame=getframe;
imwrite(Frame.cdata,'01.png');

figure;
ax = gca;
set(gca,'color','none')
% imshow(Color,[]);
imshow(Color,[],'border','tight', 'initialmagnification','fit');  %无白色边框显示
colormap(ax,cmap);
Frame=getframe;
imwrite(Frame.cdata,'02.png');   % 图像保存为新的png图像

(3)对新的RGB图像掩膜处理,并叠加显示得到新的图像

        如何将两个图像进行叠加获得热力图叠加上灰度图像后的结果图像是我们需要进行处理的内容。我们采用掩膜提取的方式,将彩色图像转化为灰度图像,并按照灰度,将背景(白色)赋值为0,内容(彩色)赋值为1。

        得到掩膜mask矩阵后,将该掩膜矩阵对原始灰度(RGB)图像进行掩膜提取,最后进行绘图展示效果。

%%
% 图像掩膜与叠加
I=imread('01.png');        %读入图像01.png,赋值给I
J=imread('02.png');   %读入图像02.png,赋值给J
J1 = rgb2gray(J);
J1(find(J1<200)) = 1;
J1(find(J1>=200)) = 0;      % 生成掩码矩阵

% 对灰度图像进行掩码提取操作
for i=1:3
    I(:,:,i) = I(:,:,i).*(1-J1);
    J(:,:,i) = J(:,:,i).*J1;
end

K=imadd(I,J);       %进行两幅图像的叠加,可以设置不透明度如K=imadd(0.6*I,0.4*J);    
%set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图形图像位置的默认设置
%set(0,'defaultFigureColor',[1 1 1])%修改图形背景颜色的设置
figure;
subplot(1,3,1);imshow(I);
subplot(1,3,2);imshow(J);
subplot(1,3,3);imshow(K); %显示叠加以后的图像

        掩膜前后效果对比与展示:

代码汇总与注意:

注意!!!:

1.图像读取部分可以利用imread()函数读取jpg/png等图像,包含原始灰度图像与待叠加的彩色数值图像。

2.进行彩色图展示时的cmap可以利用MATLAB内自带的cmap参数,并通过colormap(ax,cmap);代码显示绘制的彩色图。(本文章是通过自定义的色彩cmap,通过txt文档存放,低值为蓝 高值为红。在文章最后有示例)

clc
clear all
% 读入图像
bg_nii = load_nii('bg.nii.gz'); 
Color_nii = load_nii('Color.nii.gz'); 
cmap = load('colormap.txt');
%获取图像的矩阵形式
bg_img = bg_nii.img;  
bg_Image = bg_img(:,:,46);
bg = imrotate(bg_Image,90);
Color_img = Color_nii.img;
Color_Image = Color_img(:,:,46);
Color = imrotate(Color_Image,90);
%以上全部均为图像读入过程,(可以基于其他图像读取,此nii.gz图像特殊读取过程复杂)

%%
% cmap为提前准备好的色彩条(由蓝到红色)
% color矩阵是彩色条矩阵
% bg为灰度图像矩阵

figure;
imshow(bg,[],'Border','tight', 'initialmagnification','fit');  %无白色边框显示
Frame=getframe;
imwrite(Frame.cdata,'01.png');

figure;
ax = gca;
set(gca,'color','none')
% imshow(Color,[]);
imshow(Color,[],'border','tight', 'initialmagnification','fit');  %无白色边框显示
colormap(ax,cmap);
Frame=getframe;
imwrite(Frame.cdata,'02.png');   % 图像保存为新的png图像

%%
% 图像掩膜mask与叠加
I=imread('01.png');        %读入图像01.png,赋值给I
J=imread('02.png');   %读入图像02.png,赋值给J
J1 = rgb2gray(J);
J1(find(J1<200)) = 1;
J1(find(J1>=200)) = 0;      % 生成掩码矩阵

% 对灰度图像进行掩码提取操作
for i=1:3
    I(:,:,i) = I(:,:,i).*(1-J1);
    J(:,:,i) = J(:,:,i).*J1;
end

K=imadd(I,J);       %进行两幅图像的叠加,可以设置不透明度如K=imadd(0.6*I,0.4*J);    
%set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图形图像位置的默认设置
%set(0,'defaultFigureColor',[1 1 1])%修改图形背景颜色的设置
figure;
subplot(1,3,1);imshow(I);
subplot(1,3,2);imshow(J);
subplot(1,3,3);imshow(K); %显示叠加以后的图像

附录——(用于colormap绘图)存放cmap的txt文档示例:

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>