【问题标题】:Optimizing DP in matlab在matlab中优化DP
【发布时间】:2016-10-23 11:08:12
【问题描述】:

我有以下 DP,我将其应用于 Matlab 中的二值化图像(0 或 1)

[x, y] = size(img);
dp = zeros(x, y);
dp(1,:) = img(1,:);
dp(:,1) = img(:,1);
for i = 2:x
    for j = 2:y
        if img(i, j) == 0
            dp(i, j) = min([dp(i, j - 1), dp(i - 1, j), dp(i - 1, j - 1)]) + 1;
        end
    end
end

大 x 和 y 的代码需要很多时间,可能是因为 if 条件和使用 for 循环而不是编写矢量化代码。

谁能优化它。? 或者是否有任何方法可以通过利用矩阵img 包含 0 或 1(1 少于 0)这一事实来优化上述代码。 还有可能以某种方式使用并行for循环来加快速度吗?

【问题讨论】:

    标签: matlab image-processing optimization dynamic-programming


    【解决方案1】:

    据我所知,一般来说,您无法真正加快这种计算速度。但是,如果您知道只有极少数条目可以使用img(i,j)==0 以下方法可能会为您节省一点时间:

    [x, y] = size(img);
    dp = zeros(x, y);
    dp(1,:) = img(1,:);
    dp(:,1) = img(:,1);
    [i, j] = find(img(2:end, 2:end) == 0); % Extract only these pixels where we actually need to do something
    i = i + 1; %correct for removing the first row and column
    j = j + 1;
    for k = 1:numel(i);
        dp(i(k), j(k)) = min([dp(i(k), j(k) - 1), dp(i(k) - 1, j(k)), dp(i(k) - 1, j(k) - 1)]) + 1;
    end
    

    【讨论】:

    • 其实img(i,j) == 1的条目比较少(虽然不多)。
    猜你喜欢
    • 2021-07-17
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 2015-04-23
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多