首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对该算法进行矢量化,八阶遍历matlab速度问题。

如何对该算法进行矢量化,八阶遍历matlab速度问题。
EN

Stack Overflow用户
提问于 2012-12-25 00:01:12
回答 3查看 222关注 0票数 2

背景故事:

这是一个旧的脚本,我需要比较同一对象的两个稍微不同的图像来获取相机本身的数据。我用八度写了这个脚本,后来我发现matlab运行得更快,因为比我用matlab代替八度更快。我最近决定再次检查八度,我仍然得到了1:1000的速比。

问题:

  1. 如何将该算法向量化?
  2. matlab (诗句八度)有办法自动矢量化此代码运行1000倍快-0.1秒诗句100秒对彩色图像420X420像素大小?

剧本:

代码语言:javascript
复制
color_depth = 8;
number_of_colors = 3;
number_of_grey_levels = 2^color_depth;
Double_Distribution_0 =zeros(number_of_grey_levels,number_of_grey_levels,number_of_colors);
frame_A = 1+int16(imread('Path\image_A.tif'));
frame_1 = 1+int16(imread('Path\image_1.tif'));
[height,width]=size(frame_A(:,:,1));
number_of_pixels = width*height;

for k = 1:number_of_colors
    tic
    for i = 1:height
        for j = 1:width
                Double_Distribution_0(frame_1(i,j,k),frame_A(i,j,k),k) = 1 + Double_Distribution_0(frame_1(i,j,k),frame_A(i,j,k),k);
        end
    end
   toc
end
EN

回答 3

Stack Overflow用户

发布于 2013-01-02 20:25:48

1)是的,您可以像Shai所解释的那样将代码向量化。但是,请注意,他的解决方案缺少frame_1和frame_A上的颜色索引。

代码语言:javascript
复制
for k=1:number_of_colors
    f_1 = frame_1(:,:,k);
    f_A = frame_A(:,:,k);
    Double_Distribution_0(:,:,k) = accumarray( {f_1(:), f_A(:)}, 1,...
                                   [number_of_grey_levels, number_of_grey_levels] );

end

2) Matlab比Octave快很多倍的原因是,从6.5版开始,Matlab就使用了JIT编译器来大大加快简单的for-循环等。如果您不熟悉JIT是什么,请查看这里。据我所知,Octave还在为自己的JIT工作,但我认为还需要一段时间:-)。

您的Octave版本是否会受益于上述代码取决于他们是如何用Octave编写的。我希望会有很大的好处。

票数 3
EN

Stack Overflow用户

发布于 2012-12-25 06:19:17

如果我正确理解你的代码,它所做的是建立一个二维直方图的联合颜色分布的两个框架。

代码语言:javascript
复制
for k=1:number_of_colors
     Double_Distribution_0(:,:,k) = accumarray( {frame_1(:), frame_A(:)}, 1,...
                               [number_of_grey_levels, number_of_grey_levels] );
end
票数 1
EN

Stack Overflow用户

发布于 2013-01-25 14:57:32

谢谢你们两位的快速反应。

不知何故,语法的一部分不起作用,但当我将其缩短为:

代码语言:javascript
复制
Double_Distribution_0(:,:,k) = accumarray({frame_1(:,:,k),frame_A(:,:,k)},1);

我得到了我想要的结果(将结果与旧代码进行比较),在这种情况下,八度下的运行时间仅比matlab高2倍。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14026607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档