【发布时间】:2014-01-27 17:31:52
【问题描述】:
我有一个名为 A 的 m×n 矩阵,其值为 1 和 0。如果 8 个相邻像素中至少有 5 个是 1,我想将所有 0 值转换为 1。我尝试的是使用 nlfilter 函数,但我不知道应该如何使用 arg fun,我需要帮助。
我为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{:});
有什么建议吗?主要问题是我不习惯处理函数。
= 更新 =
我终于想出了一个好结果。我将函数更改为输出一个标量,当我在nlfilter 中将它用作fun arg 时,它按我想要的方式工作。这是我的代码,感谢您的帮助,我希望它对任何人都有用:
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')
【问题讨论】:
标签: matlab matrix neighbours