我有一个名为 A 的 m×n 矩阵,其值为 1s 和 0s。如果 8 个相邻像素中至少有 5 个是 1,我想将所有 0 值转换为 1。我尝试的是使用该nlfilter
功能,但我不知道fun
应该如何使用 arg,我需要帮助。我创建了一个函数作为句柄,nlfilter
如下所示:
function b = gap_fill(A)
b=A;
index= A([1 2 3 4 6 7 8 9]);
if sum(index)>=5
b(5)= 1
end
end
然后我尝试这样做:
B= nlfilter(A,[3 3],@gap_fill)
但它给出了这个错误:
??? Subscripted assignment dimension mismatch.
Error in ==> nlfilter at 75
b(i,j) = feval(fun,x,params{:});
有什么建议吗?主要问题是我不习惯处理函数。
= 更新 =
我终于想出了一个好结果。我将函数更改为输出标量,当我将其用作fun
arg 时,nlfilter
它按我想要的方式工作。这是我的代码,感谢您的帮助,我希望它对任何人都有用:
function b = gap_fill(A)
index= A([1 2 3 4 6 7 8 9]);
if sum(index)>=5
A(5)= 1;
end
b=A(5);
end
在 MATLAB 中:
b= nlfilter (A,[3 3],'gap_fill')