我正在尝试编写一个实现imfilter函数的函数。但是得到了这个错误。
???下标索引必须是实数正整数或逻辑
此时
s = size(img);
在下面找到代码段
s = size(img);
Ix = zeros(s);
Iy = zeros(s);
for i = 1:s
for j = 1:s
temp = img(i-1:i+1,j-1:j+1) .* Gx;
Ix(i,j) = sum(temp(:));
end
end
请问我有什么问题吗?
已编辑的代码
s = size(img);
Ix = zeros(s);
Iy = zeros(s);
for i = 2:s(1)-1
for j = 2:s(2)-1
temp = img(i-1:i+1,j-1:j+1) .* Gx;
Ix(i,j) = sum(temp(:));
end
end
答案 0 :(得分:3)
如果在调用s= size(img);
时确实发生了这种情况,那么您的工作区中可能会有一个变量size
,它会影响size
函数。
此外,您的循环可能存在一些问题。首先,您不能在MATLAB中使用零作为索引。因此,当你在循环开始时有i = 1, j = 1
时,你会期望temp
行返回下标索引错误。
size
的输出,假设img
是灰度图像,将是两个数字。当你执行i = 1:s
时,它将忽略第二个。只要您的图像是方形的,但如果不是您的图像就不会达到预期效果,这样就可以了。
最后,看看conv2
这样的情况,而不是创建一个循环。