Matlab:如何将暗光环境下的成像可视化以及灰度图映射成彩色图像?

Matlab:如何将暗光环境下的成像可视化以及灰度图映射成彩色图像?

主题内容:将暗光环境下的小鼠体内的放射性元素成像与小鼠图像进行融合。(原图的格式采用tiff格式,本文涉及的素材及代码均已上传(提取码: sxf4))

在这里插入图片描述

一:将暗光环境下的成像可视化?

  • 采用矩阵的点称对原图像素值进行可视化变换。
pet=imread('E:/photograph.tif');%小鼠图像
pet=double(pet);%将像素转换成double类型
pet1=pet.^(0.4+0.05*6);
imshow(uint8(pet1));%显示可视化图像,这里将类型还原成整数类型显示

tumor=imread('E:/tumors.tif');%放射扫描图像
tumor=double(tumor);
imshow(uint8(tumor.^(0.4+0.05*5)));

在这里插入图片描述

二:如何进行灰度图的颜色映射?

  • 由于小鼠图像的通道为1(灰度图通道数为1),首先将通道数转换成3

    tumor_dyed_color(:,:,1)=pet1(:,:,1);%其余2个通道的颜色值均与1通道保持一致
    tumor_dyed_color(:,:,2)=pet1(:,:,1);
    tumor_dyed_color(:,:,3)=pet1(:,:,1);
    
  • 设定ROI(Region Of Interest),而不是把将放射元素成像全部映射为彩色。

    lower_tensity=1000; %选取灰度值大于1000,小于1300的像素点进行颜色映射。
    upper_tensity=1300;
    

    采用map.txt进行颜色映射,map内有从0255种颜色值,通过不同的灰度值映射成不同的0255颜色值。

    在这里插入图片描述

    对应的转换关系为:

在这里插入图片描述

map=round(255*load('E:/map.txt'));%将map转换为整数类型
>>
level_num=(range/len);%计算level_num
ind=round((tumor(i,j)-lower_tensity)/level_num);%将ROI范围内像素对应的灰度值映射到map的对应颜色值
>>
tumor_dyed_color(i,j,1)=map(ind,1);%进行3个颜色通道的映射
tumor_dyed_color(i,j,2)=map(ind,2);
tumor_dyed_color(i,j,3)=map(ind,3);

三:代码的整合:

pet=imread('E:/photograph.tif');
pet=double(pet);
pet1=pet.^(0.4+0.05*6);
si=size(pet1);
pet=zeros(si(1),si(2),3);
tumor_dyed_color=zeros(si(1),si(2),3);%设置空图

tumor_dyed_color(:,:,1)=pet1(:,:,1);%通道数转换
tumor_dyed_color(:,:,2)=pet1(:,:,1);
tumor_dyed_color(:,:,3)=pet1(:,:,1);

tumor=imread('E:/tumors.tif');
tumor=double(tumor);
tumor=tumor.^(0.4+0.05*5);
size_tumor=size(tumor);

lower_tensity=1000; %设定ROI
upper_tensity=1300;

map=round(255*load('E:/map.txt'));
s=size(map);
len=s(1);
range=upper_tensity-lower_tensity+1;
level_num=(range/len);

for i=1:size_tumor(1)%扫描图像
    for j=1:size_tumor(2) %感兴趣像素检测
        if tumor(i,j)>lower_tensity&&tumor(i,j)<upper_tensity
            ind=round((tumor(i,j)-lower_tensity)/level_num);
                           if ind==0 %colormap中的色彩行标
                                     ind=1;
                           end
			tumor_dyed_color(i,j,1)=map(ind,1);%map投影到显示图
			tumor_dyed_color(i,j,2)=map(ind,2);
			tumor_dyed_color(i,j,3)=map(ind,3);
        end
    end
end
imshow(uint8(tumor_dyed_color));
pause(0)

四:最终的效果展示:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/acceptedday/article/details/104782223
今日推荐