matlab小程序出错

来源:百度知道 编辑:UC知道 时间:2024/05/27 08:38:25
各位大哥,一个小程序,麻烦指点修正!
A=imread('68.jpg','jpg'); 读取图像
G=rgb2gray(A);
T=im2bw(G,0.4); 二值化图像
[l,w]=size(T);
m=0;n=0;sn=0
for m=0:1:l
for n=0:1:w
while (T(m,n)<=1)
sn=sn+1;
end
end
end
错误代码
??? Attempted to access T(0,0); index must be a positive integer or logical.

Error in ==> bn at 8
while (T(m,n)<=1)
我目前就三十积分,都拿出来了!
帮帮忙吧!

for m=0:1:l
for n=0:1:w
while (T(m,n)<=1)
向量的下标应该从1开始,不能从0。你的程序m和n的取值都是从0开始的,所以出错了,改成
clc
clear all
A=imread('68.jpg','jpg'); %读取图像
G=rgb2gray(A);
T=im2bw(G,0.4); %二值化图像
[l,w]=size(T);
m=0;n=0;sn=0;
for m=1:l %当步长值为1时,可以省略不写
for n=1:w
if T(m,n)<=1 %(不能用while,否则出现死循环)
sn=sn+1;
end
end
end

呵呵,for m=0:1:l
for n=0:1:w
这个时候你想想看,你所用到的成了w+1个长度了,会越界的。即使在C++中也不是这么写的啊
在matlab中, 数组的第一个,下表是1,而不是0,所以你要访问f(0,0)就会出错了。

这个错误其实很好明白,看一看说明:Attempted to access T(0,0); index must be a positive integer or logical
在使用程序的时候,能够看懂简单的错误提示是很重要的,能够帮助你省时省力。
一楼给你指出的另一处错误也很重要,程序最要紧的是贴切合理,否则进入了死循环你更找不到错误在什么地方了。
另外我很奇怪的点:二值图像就是0、1,你这句即使改成了
if T(m,n)<=1 %(不能用while,否则出现死循环)
那样的话,每次循环依然全部为真。最后的结果就是 sn = l*w 而已。
是不是你想要统计黑、白点的数目?那样的话我想应该改成
if T