【问题标题】:Matlab execute function each cell Matrix with matrix and cell postion as argumentsMatlab执行函数每个单元格矩阵,以矩阵和单元格位置作为参数
【发布时间】:2013-02-19 17:32:39
【问题描述】:

我需要对一组约 400 张图像中每个图像的每个像素应用一个函数。我编写的函数(称为customf)需要3 个参数:矩阵和单元格在矩阵中的位置(mn)。需要像素的位置来计算需要周围像素值的 LBP(局部二进制模式)。 customf(matrix, m, n) 返回一个整数 d 以便 0 < d < 256,我想将 d 的每个值存储在与我的图像大小相同的矩阵中。

鉴于集合相当大,我希望我的代码尽可能高效,但我不明白如何以这种方式使用cellfunarrayfun

还是更好的解决方案? (使用嵌套的for 可能效率低下?)

谢谢!

【问题讨论】:

  • 函数customf 中需要什么nm?只是为了识别当前单元格,还是为了计算?
  • customf 需要 m 和 n 来计算每个像素的局部二进制模式,这需要相邻像素的值 (164.125.234.242/~prascat/wordpress/wp-content/uploads/2012/10/…)
  • 不幸的是,我不知道如何避免 NxM 循环,但是将它移动到 inside 函数应该会有所帮助(避免 NxM 常量函数调用的开销)。您可以重写该函数,使其循环遍历整个图像(或可选地仅将边界指定为参数的小块)并返回计算的模式。

标签: performance matlab matrix


【解决方案1】:

你能用不同的方式写customf吗?与其为每个像素(mn)处理整个图像,不如只给它一个计算 LBP 所需的局部补丁补丁的中心像素?

例如,如果 customf 需要查看像素 -/+ k 远离 mn 以计算响应 d mn,那么您可能有

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 以获得与image 相同大小的D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多