Matlab问题

Matlab问题,第1张

打开eyediagram.m看

是不是没有写

function [output] = eyediagram(a,b,c)

...

end

m文件只有这样定义,才是函数,可传入参数调用

否则如果直接写代码,matlab认为是脚本

---------------------

添加

eyediagram(y_k,2*R,2,R/2)

这句调用之前,你要给y_k赋值啊,

否则怎么传给函数计算呢?

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

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


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

原文地址: https://outofmemory.cn/yw/8073484.html

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

发表评论

登录后才能评论

评论列表(0条)

保存