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

1f37487d1dbb2a1c46556af698e071d3.png

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

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

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:\MATLAB\bin\A\',num2str(i),'.bmp']);
end

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

42bbaed0a2f23692c25f0ec37a093f48.jpeg

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

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:\MATLAB\bin\A\',num2str(i),'.bmp']);
end

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

c25692230b3c5b1f886987fa6b0230e0.jpeg  

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

参考资料:

[1] 周廷刚 .遥感原理与应用.

图片来源:由 Neha_Kumari、955169 在Pixabay上发布

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值