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

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

close allclearclc

%读取并显示原图

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') % 显示人脸灰度图

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

Y= 0.257*R + 0.504*G + 0.098*B + 16

Cb = -0.148*R - 0.291*G+ 0.439*B + 128

Cr = 0.439*R - 0.368*G - 0.071*B + 128

Y = floor(Y+0.5)%四舍五入,取整

Cr = floor(Cr+0.5)

Cb = floor(Cb+0.5)

下面是转换回去的公式,验证是否转换正确,数据是否有损失。

R = 1.164*(Y-16) + 1.596*(Cr-128)

G = 1.164*(Y-16) - 0.813*(Cr-128) - 0.392*(Cb-128)

B = 1.164*(Y-16) + 2.017*(Cb-128)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12076601.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存