数字图像处理——彩色图像

1.分别提取出一幅图片中的RGB三个部分的图像。如下:

原图:

效果图:

clear,clc,close all;
f=imread('color.jpg');
imshow(f);
r=f(:,:,1);g=f(:,:,2);b=f(:,:,3);%f为一个三维矩阵,这行代码相当于分别提取出三维向量中的每一维。
x=zeros(size(r));新建一个大小跟r同样的二位矩阵x
figure,imshow(cat(2,r,g,b));

red=cat(3,r,x,x);figure,imshow(red);%用彩色显示红色区域

 2.画出下图图像

a=zeros(300,300);
c=a;b=a;

a(1:100,:)=255;
c(101:200,:)=255;
b(201:300,:)=255;

rgb=cat(3,b,c,a);figure,imshow(rgb);

3.渐变色

a=1:255;%新建一个值从1到255递增的矩阵
a=a';%把a矩阵转置
a=uint8(repmat(a,[2,300,3]));
imshow(a);


%画彩色的渐变
a=1:255;
a=a';

a=uint8(repmat(a,[1,300]));
b=a;
b(:,:)=255;
a=cat(3,a,a,b);
imshow(a);

4.提取图像中的肤色部分

原理:人的肤色中红色浓度范围在140-160之间,转化为ycbcr色彩空间后,提取出红色的部分,该部分不受光照的影响。

f=imread('hh.jpg');imshow(f);
ycbcr=rgb2ycbcr(f);%转化为ycbcr空间,y是亮度,cb是蓝色浓度,cr是红色浓度

cr=ycbcr(:,:,3);
figure,imshow(cr);

cr(cr>140&cr<160)=255;
cr(cr~=255)=0;

figure,imshow(cr);

bw=im2bw(cr);
bwdilate=imdilate(bw,strel('disk',1));
figure,imshow(bwdilate);

bw=imfill(bwdilate,'holes');
figure,imshow(bw);

bws=cat(3,bw,bw,bw);
% bws=repmat(bw,[1,1,3]);
result=uint8(bws).*f;
figure,imshow(result);

猜你喜欢

转载自blog.csdn.net/qq_41536360/article/details/89519302