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);