永发信息网

function J=fill_func(BW,ori_image) [m,n]=size(BW)

答案:2  悬赏:60  手机版
解决时间 2021-03-04 11:13
  • 提问者网友:聂風
  • 2021-03-03 12:47
function J=fill_func(BW,ori_image)
[m,n]=size(BW);获取图片灰度矩阵的行数和列数,求出图片像素大小
J=ori_image;back=[];
figure,imshow(BW);
L=bwlabel(BW,8); %对二值图像进行标识
[nx,ny]=find(L==0); % 找到所有的背景像素点坐标
for i=1:length(nx)
back=[back ori_image(nx(i),ny(i))];
end
fill_grey=mean(back);
num=max(L(:));
% 对于每一个标识所对应的区域中的每一个像素,用填充灰度值代替其3*3邻域像素的原有灰度值
for i=1:num
[idx,idy]=find(L==i);
for j=1:length(idx)
if idx(j) == 1 || idx(j) == m || idy(j) == 1 || idy(j) == n
break;
end
J(idx(j)-1:idx(j)+1,idy(j)-1:idy(j)+1)=fill_grey; % J(idx(j),idy(j))=fill_grey;
end
End
菜鸟问题:function J=fill_func(BW,ori_image)中ori_image是什么?
J=ori_image;back=[];中back=[]是什么作用?括号中为什么没东西?
L=bwlabel(BW,8)这是什么公式,作用?
[nx,ny]=find(L==0);中nx和ny是什么?两个等号是恒等么?
for i=1:length(nx)中length(nx)是什么?
fill_grey=mean(back); 这是个函数还是调用程序?这是在干嘛?
num=max(L(:));这个完全看不懂?
idx(j) == 1 || idx(j) == m || idy(j) == 1 || idy(j) == n这个是在干嘛?俩等号俩竖线是什么东西?
J(idx(j)-1:idx(j)+1,idy(j)-1:idy(j)+1)=fill_grey;最后一个问题,这在算什么?
最佳答案
  • 五星知识达人网友:污到你湿
  • 2021-03-03 13:53
1.ori_image应该是原始图像,BW应该是原始图像提取的二值图像
2. back=[]是matlab存储未知长度值的技巧,相当于声明这个空的初始值,之后的值向这个量追加back=[back,new_var]
3. bwlabel作用是寻找连通区域,一般处理后背景的值为0,其他区域的值为1,2,3之类的
4.==是判断是否相等,由于L是二维矩阵,所以返回值要存储xy坐标,就是nx,ny
5. length是求向量的长度
6.程序利用BW求背景区域,再用ori_image及对应的点求背景色的均值,就是mean(back)
7. L(:)是把矩阵拉直变向量,因为max对矩阵求值会得到向量,所以这里用这个技巧就是求矩阵L的最大值,也可以写成max(max(L))
8. ||表示逻辑判断或,这句的意思是如果是边界,行下标是1或者n,列下标1或者m就不计算,因为后面那个赋值公式会越界,这里判断避免越界
9. 因为J存储原图像,那么把背景的均值计算出来后要把均值改写回原图像。而背景模板是3*3的,所以中心点为(0,0)那么水平垂直范围都是-1到+1
10. 有些matlab的函数其实可以看看help,虽然理解会慢点,但是对学习有帮助。如果是应付课程论文,请无视这句
全部回答
  • 1楼网友:思契十里
  • 2021-03-03 14:19
同问。。。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯