索引超出矩阵维度 看了好多遍也没看出越界 求助

CristianoC20 2018-08-23 08:07:14
clc;clear;
a=imread('1.png');
subplot(2,3,1);imshow(a);
xlabel('(a)原始图像');
a=im2bw(a); %二值化
L=bwlabel(a); %把图像标记为矩阵
[l,w]=size(L); %得出矩阵长宽以便计算
a1=a; %后续有其他操作先使用a的一个副本
for k=1:w %扫描左边界中与边界融合的颗粒,以灰度值是否为0判断
if(L(k,1)~=0) %若检测到有与边界融合的颗粒置其灰度值为0设为背景
i=L(k,1);
a1(i)=0;
i=0;
end
end
for k=1:w %扫描右边界中与边界融合的颗粒,以灰度值是否为0判断
if(L(k,w)~=0)
i=L(k,w);
a1(i)=0;
i=0;
end
end
for k=1:l %扫描上边界中与边界融合的颗粒,以灰度值是否为0判断
if(L(1,k)~=0)
[i]=find(L==L(1,k));
% i=L(1,k);
a1(i)=0;
i=0;
end
end
for k=1:l %扫描下边界中与边界融合的颗粒,以灰度值是否为0判断
if(L(w,k)~=0)
i=L(w,k);
a1(i)=0;
i=0;
end
end
a1=a-a1; %减去无与边界融合在一起的颗粒得到仅与边界融合的颗粒
subplot(2,3,2);imshow(a1);
xlabel('(b)仅与边界融合在一起的颗粒');
...全文
883 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dbdx_tk 2018-08-31
  • 打赏
  • 举报
回复
在matlab中size函数使用后得出来的两个数分别代表了图像的宽和高,得到的第一个数值(你程序中的l)表示的是图像的高,得到的第二个数值(你程序中的w)表示的是图像的宽。所以你扫描左右边界是需要扫描第一列和最后一列的所有行,即图像的高。同理你扫描上下边界也是类推要扫描图像的每一列,即图像的宽。
zhoujk 2018-08-29
  • 打赏
  • 举报
回复
在报错的时候,中断检查一下循环的范围是否出错。
CristianoC20 2018-08-28
  • 打赏
  • 举报
回复
引用 1 楼 dbdx_tk 的回复:
clc;clear;
a=imread('1.png');
subplot(2,3,1);imshow(a);
xlabel('(a)原始图像');
a=im2bw(a); %二值化
L=bwlabel(a); %把图像标记为矩阵
[l,w]=size(L); %得出矩阵长宽以便计算
a1=a; %后续有其他操作先使用a的一个副本
for k=1:l %扫描左边界中与边界融合的颗粒,以灰度值是否为0判断
if(L(k,1)~=0) %若检测到有与边界融合的颗粒置其灰度值为0设为背景
i=L(k,1);
a1(i)=0;
i=0;
end
end
for k=1:l %扫描右边界中与边界融合的颗粒,以灰度值是否为0判断
if(L(k,w)~=0)
i=L(k,w);
a1(i)=0;
i=0;
end
end
for k=1:w %扫描上边界中与边界融合的颗粒,以灰度值是否为0判断
if(L(1,k)~=0)
[i]=find(L==L(1,k));
% i=L(1,k);
a1(i)=0;
i=0;
end
end
for k=1:w %扫描下边界中与边界融合的颗粒,以灰度值是否为0判断
if(L(l,k)~=0)
i=L(w,k);
a1(i)=0;
i=0;
end
end
a1=a-a1; %减去无与边界融合在一起的颗粒得到仅与边界融合的颗粒
subplot(2,3,2);imshow(a1);
xlabel('(b)仅与边界融合在一起的颗粒');
我不太懂..你标出来的不就是我扫描四个边界吗
dbdx_tk 2018-08-24
  • 打赏
  • 举报
回复
clc;clear;
a=imread('1.png');
subplot(2,3,1);imshow(a);
xlabel('(a)原始图像');
a=im2bw(a); %二值化
L=bwlabel(a); %把图像标记为矩阵
[l,w]=size(L); %得出矩阵长宽以便计算
a1=a; %后续有其他操作先使用a的一个副本
for k=1:l %扫描左边界中与边界融合的颗粒,以灰度值是否为0判断
if(L(k,1)~=0) %若检测到有与边界融合的颗粒置其灰度值为0设为背景
i=L(k,1);
a1(i)=0;
i=0;
end
end
for k=1:l %扫描右边界中与边界融合的颗粒,以灰度值是否为0判断
if(L(k,w)~=0)
i=L(k,w);
a1(i)=0;
i=0;
end
end
for k=1:w %扫描上边界中与边界融合的颗粒,以灰度值是否为0判断
if(L(1,k)~=0)
[i]=find(L==L(1,k));
% i=L(1,k);
a1(i)=0;
i=0;
end
end
for k=1:w %扫描下边界中与边界融合的颗粒,以灰度值是否为0判断
if(L(l,k)~=0)
i=L(w,k);
a1(i)=0;
i=0;
end
end
a1=a-a1; %减去无与边界融合在一起的颗粒得到仅与边界融合的颗粒
subplot(2,3,2);imshow(a1);
xlabel('(b)仅与边界融合在一起的颗粒');

4,445

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧