伪彩色增强是把灰度图像中不同灰度值的区域赋予不同的颜色,简单来说,就是给一个黑白图像“上色”的过程。很多灰度图像因为自身色彩原因,在人眼的判别中不是十分方便,所以要对一些灰度图像进行伪彩色增强。增强后的灰度图像颜色种类越多,人眼能够识别的信息也越多。今天就给大家分享两种伪彩色合成的方法和代码。
第一个,是密度分割法。密度分割法是对单波段黑白图像的灰度级从黑到白分成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
空间域-灰度级伪彩色合成前后对比
以上就是两种伪彩色合成的方法与代码,重要的是,可以批量操作。把伪彩色合成的代码替换成你需要的任何图像处理操作都可以。如果今天的分享正好是你需要的或者喜欢这个分享的朋友,欢迎转发支持一下,谢谢。