Matlab imfilter函数实现

时间:2014-05-14 12:50:51

标签: matlab image-processing

我正在尝试编写一个实现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

1 个答案:

答案 0 :(得分:3)

如果在调用s= size(img);时确实发生了这种情况,那么您的工作区中可能会有一个变量size,它会影响size函数。

此外,您的循环可能存在一些问题。首先,您不能在MATLAB中使用零作为索引。因此,当你在循环开始时有i = 1, j = 1时,你会期望temp行返回下标索引错误。

size的输出,假设img是灰度图像,将是两个数字。当你执行i = 1:s时,它将忽略第二个。只要您的图像是方形的,但如果不是您的图像就不会达到预期效果,这样就可以了。

最后,看看conv2这样的情况,而不是创建一个循环。