我需要在一组~400幅图像中对每个图像的每个像素应用一个函数。我写的函数(称为customf
)需要3个参数:矩阵,以及矩阵中单元格的位置(m
和n
)。需要像素的位置以便计算需要周围像素的值的LBP(局部二进制模式)。
customf(matrix, m, n)
返回一个整数d
,以便0 < d < 256
,我希望将d
的每个值存储在与我的图像大小相同的矩阵中。
鉴于该集非常大,我希望我的代码尽可能高效,但我不明白如何以这种方式使用cellfun
或arrayfun
。< / p>
还是更好的解决方案? (使用嵌套的for
可能效率低下?)
谢谢!
答案 0 :(得分:1)
你能用不同的方式写customf
吗?而不是为每个像素(m
,n
)处理整个图像,为什么不给它只需要本地补丁用于计算贴片中心像素的LBP?
例如,如果customf
需要查看像素 - / k
远离m
,n
来计算d
的响应m
1}},n
,那么你可能有
k = 5;
localF = @( patch ) customf( patch, k+1, k+1 ); % assuming patch is of size (2k+1)x(2k+1)
% apply LBP to an image
D = nlfilter( image, [2*k+1 2*k+1], localF );
请注意nlfilter
零填充image
,以获得与D
大小相同的image
。