是不是没有写
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') % 显示人脸灰度图
这个是我个人加的注释 不知道你能不能理解 不能理解可以追问 我们一起学习下 哈哈 我也是新手
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)