关于MATLAB图像处理程序的问题:请问每一步的意思,输出的4幅图像分别是什么?

image_rgb=imread('hqy.jpg');
image_ycbcr=rgb2ycbcr(image_rgb);
y=image_ycbcr(:,:,1);
cr=image_ycbcr(:,:,2);
cb=image_ycbcr(:,:,3);
[W,H]=size(y);
image_face=zeros(W,H);
for x1=1:W; %%%%%%%%(cb=( 100,140),cr=(70,160)
for y1=1:H;
if (cb(x1,y1)>=70)&&(cb(x1,y1)<=140)&&(cr(x1,y1)>=80)&&(cr(x1,y1)<=170)
image_face(x1,y1)=0;
else
image_face(x1,y1)=255;
end
end
end
figure(1),imshow(image_face)
se1=strel('square',35); %%%%%%%%% 找到人脸区域并设为白色%%%% (r=35)
fo=imclose(image_face,se1);
figure(2),imshow(fo)
log=logical(fo);
r=image_rgb(:,:,1);
g=image_rgb(:,:,2);
b=image_rgb(:,:,3);
r(log==0)=255;
g(log==0)=255;
b(log==0)=255;
face_rgb=cat(3,r,g,b);
figure(3),imshow(face_rgb),title('face_rgb');
afm = rgb2gray(face_rgb); %%%%%人眼定位
figure(4), imshow(afm), title('surface image');
这是一个 从图像中提取人脸 和定位出人眼的程序 运行后一共有4幅图像 我想问这4图像是什么图像

close all;clear;clc;
%读取并显示原图
image_rgb=imread('woman1.jpg');
image_ycbcr=rgb2ycbcr(image_rgb); %将RGB色彩值变换为YcbCr色彩空间(将RGB真彩色图像转化为YcbCr色彩空间中相等的图像)
y=image_ycbcr(:,:,1); %这三行分别是Ycbcr空间的y,cb,cr对应矩阵
cr=image_ycbcr(:,:,2);
cb=image_ycbcr(:,:,3);
[W,H]=size(y); % y对应矩阵大小
image_face=zeros(W,H); %创建和原图等大的矩阵用来存放接下来二值化人脸数据
%以下循环是根据设定的阈值把人脸转换成二值图像
for x1=1:W; %%%%%%%%(cb=( 100,140),cr=(70,160)这是阈值,这个阈值应该是人脸肤色的范围
for y1=1:H;
if (cb(x1,y1)>=70)&&(cb(x1,y1)<=140)&&(cr(x1,y1)>=80)&&(cr(x1,y1)<=170)
image_face(x1,y1)=0;
else
image_face(x1,y1)=255;
end
end
end
figure(1),imshow(image_face) %显示初步转换成二值图像的人脸
%%%%%%%%% 找到人脸区域并设为白色%%%% (r=35)
se1=strel('square',35); %这个函数可以创建边长35的方形元素
fo=imclose(image_face,se1); %利用上面创建的方形元素,弥补figure(1)中人脸中以及其他部分残留的小块黑色
figure(2),imshow(fo) %显示修补漏洞后的人脸
log=logical(fo); %生成一个逻辑索引矩阵,为非零元素时返回1,否则返回0。用于把figure(2)中黑色部分记录为0,这样对非人脸部分做修改也不会影响人脸
r=image_rgb(:,:,1); %这个是rgb空间三维的数据
g=image_rgb(:,:,2);
b=image_rgb(:,:,3);
r(log==0)=255; %根据前面的逻辑数据把之前的黑色部分对应位置设为255,以后显示RGB图时,非人脸部分就是白色啦
g(log==0)=255;
b(log==0)=255;
face_rgb=cat(3,r,g,b); %把修改后的RGB矩阵重组
figure(3),imshow(face_rgb),title('face_rgb'); % 显示非人脸部分已经转白的RGB图
afm = rgb2gray(face_rgb); % rgb图转灰度图
figure(4), imshow(afm), title('surface image') % 显示人脸灰度图

这个是我个人加的注释 不知道你能不能理解 不能理解可以追问 我们一起学习下 哈哈 我也是新手追问

谢谢啊 很全面 大概能看懂 我还有几个问题要请教下你 加下QQ 562174452

追答

能不能麻烦你把整个检测眼睛的程序给我 我想学习一下。
如果还是半成品就算了 我的邮箱是这个 [email protected] 谢谢 哈哈!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-30
image_rgb=imread('hqy.jpg'); % 打开图片
image_ycbcr=rgb2ycbcr(image_rgb); % 颜色格式RGB转换到ycbcr
% 读取y,cr,cb分量
y=image_ycbcr(:,:,1);
cr=image_ycbcr(:,:,2);
cb=image_ycbcr(:,:,3);
% 图像高和宽
[W,H]=size(y);
% 申请新的内存空间并初始化为0;
image_face=zeros(W,H);
%使用for 循环 找到人脸区域并设为白色%%
for x1=1:W; %%%%%%%%(cb=( 100,140),cr=(70,160)
for y1=1:H;
if (cb(x1,y1)>=70)&&(cb(x1,y1)<=140)&&(cr(x1,y1)>=80)&&(cr(x1,y1)<=170)
image_face(x1,y1)=0;
else
image_face(x1,y1)=255;
end
end
end
figure(1),imshow(image_face)
% 创建35*35区域
se1=strel('square',35); % (r=35)
% 形态学闭运算,消除脸部区域内部空洞
fo=imclose(image_face,se1);
figure(2),imshow(fo)
% 建立逻辑图像,人脸区域1,非人脸0;
log=logical(fo);
%读取彩色图像r,g,b分量
r=image_rgb(:,:,1);
g=image_rgb(:,:,2);
b=image_rgb(:,:,3);
% 将log图想中值为0的单元对应的r,g,b中灰度值置255;
r(log==0)=255;
g(log==0)=255;
b(log==0)=255;
% r,g,b重新组合为一幅彩色图像
face_rgb=cat(3,r,g,b);
figure(3),imshow(face_rgb),title('face_rgb');
%彩色图像灰度化为256阶(灰度值0-255)灰度图
afm = rgb2gray(face_rgb); %%%%%人脸定位
figure(4), imshow(afm), title('surface image');
相似回答