MATLAB批量操作图片的伪彩色合成

2021-05-08 15:19:52 浏览数 (1)

伪彩色增强是把灰度图像中不同灰度值的区域赋予不同的颜色,简单来说,就是给一个黑白图像“上色”的过程。很多灰度图像因为自身色彩原因,在人眼的判别中不是十分方便,所以要对一些灰度图像进行伪彩色增强。增强后的灰度图像颜色种类越多,人眼能够识别的信息也越多。今天就给大家分享两种伪彩色合成的方法和代码。

第一个,是密度分割法。密度分割法是对单波段黑白图像的灰度级从黑到白分成N个区间,给每个区间指定一种彩色,可以有效直观地把灰度图像变成彩色图像。例如,把灰度范围0~15的区间为A1,赋值为1;灰度范围15~25的区间为A2,赋值为2等等,再给每个区域赋予不同的颜色B1、B2等,以此类推,生成一幅彩色图像。因为是赋予的彩色,与物品真正的颜色无关,所以才会称为“伪彩色”。

代码语言:javascript复制
clc;clear;close all;
% 选定存放数据的文件夹
picFolderName='A';
jpgpathName=sprintf('%s/*.jpg',picFolderName);
s=dir(jpgpathName);
% 批量处理循环-数据读取
for i=1:length(s)
    temfilename=s(i).name;
    tempathName=sprintf('%s/%s',picFolderName,temfilename);
    imgmatrix=imread(tempathName);
    % 密度分割法伪彩色合成
    I=double(imgmatrix);
    % 第1个等级
    a=zeros(size(I));
    b=ones(size(I))*255;
    d1=find(((I>=32)&(I<63))|((I>=96)&(I<127))|((I>=154)&(I<191))|((I>=234)&(I<=255)));
    a(d1)=b(d1);
    Q(:,:,3)=a;
    % 第2个等级
    a=zeros(size(I));
    b=ones(size(I))*255;
    d1=find(((I>=64)&(I<95))|((I>=96)&(I<127))|((I>=192)&(I<233))|((I>=234)&(I<=255)));
    a(d1)=b(d1);
    Q(:,:,2)=a;
    % 第3个等级
    a=zeros(size(I));
    b=ones(size(I))*255;
    d1=find(((I>=128)&(I<154))|((I>=154)&(I<191))|((I>=192)&(I<233))|((I>=234)&(I<=255)));
    a(d1)=b(d1);
    Q(:,:,1)=a;  
    % 格式转换
    Q = uint8(Q);
    imshow(Q);
    % 批量处理循环-结果批量保存
    f = getframe(gcf);
    imwrite(f.cdata,['F:MATLABbinA',num2str(i),'.bmp']);
end

密度分割法伪彩色合成前后对比

密度分割法简单直观,但是,变换的彩色数目有限。而与密度分割不同,空间域灰度级色彩变换更为常用。其原理是将原图像f (x,y)的灰度范围分段,经过红、绿、蓝3种不同变换,变成三基色分量R(x,y)、G(x,y)、B(x,y),用它们分别控制彩色显示器的红、绿、蓝电子枪,使彩色显示屏上合成彩色图像。

代码语言:javascript复制
clc;clear;close all;
picFolderName='A';
jpgpathName=sprintf('%s/*.jpg',picFolderName);
s=dir(jpgpathName);
for i=1:length(s)
    temfilename=s(i).name;
    tempathName=sprintf('%s/%s',picFolderName,temfilename);
    imgmatrix=imread(tempathName);

    %空间域-灰度级彩色变换   
    I=double(imgmatrix);
    [M,N]=size(I);
    L=256;
    for a=1:M
        for b=1:N
            if I(a,b)<=L/4;
                R(a,b)=0;
                G(a,b)=4*I(a,b);
                B(a,b)=L;
            else
                if I(a,b)<=L/2;
                    R(a,b)=0;
                    G(a,b)=L;
                    B(a,b)=-4*I(a,b) 2*L;
                else
                    if I(a,b)<=3*L/4;
                        R(a,b)=4*I(a,b)-2*L;
                        G(a,b)=L;
                        B(a,b)=0;
                    else
                        R(a,b)=L;
                        G(a,b)=-4*I(a,b) 4*L;
                        B(a,b)=0;
                    end
                end
            end
        end
    end
    for r=1:M
        for e=1:N
            Q(r,e,1)=R(r,e);
            Q(r,e,2)=G(r,e);
            Q(r,e,3)=B(r,e); 
        end
    end

    %格式转换
    Q=uint8(Q);
    imshow(Q);
    f=getframe(gcf);
    imwrite(f.cdata,['F:MATLABbinA',num2str(i),'.bmp']);
end

空间域-灰度级伪彩色合成前后对比

以上就是两种伪彩色合成的方法与代码,重要的是,可以批量操作。把伪彩色合成的代码替换成你需要的任何图像处理操作都可以。如果今天的分享正好是你需要的或者喜欢这个分享的朋友,欢迎转发支持一下,谢谢。

0 人点赞