如何使用或不使用bsxfun优化此代码?

时间:2016-05-03 10:58:56

标签: optimization bsxfun

for y=q-100:q+100
 for x=r-100:r+100
  for c=x-1:x+1
   for d=y-1:y+1
    t=impixel("imagename",c,d);
     if (t>121)
      m(c,d)=255;
     end
   end
  end
 end
end
imshow(m);

这运行代码很长一段时间,我需要最小化计算时间。

1 个答案:

答案 0 :(得分:0)

for y=q-100:q+100
 for x=r-100:r+100
    c=x-1;d=y-1;

    // top 3 pixels
    t=impixel("imagename",c,d);if (t>121) m(c,d)=255; end
    c=c+1;
    t=impixel("imagename",c,d);if (t>121) m(c,d)=255; end
    c=c+1;
    t=impixel("imagename",c,d);if (t>121) m(c,d)=255; end

    // right pixel
    d=d+1;
    t=impixel("imagename",c,d);if (t>121) m(c,d)=255; end

    // bottom 3 pixels
    d=d+1;
    t=impixel("imagename",c,d);if (t>121) m(c,d)=255; end
    c=c-1;
    t=impixel("imagename",c,d);if (t>121) m(c,d)=255; end
    c=c-1;
    t=impixel("imagename",c,d);if (t>121) m(c,d)=255; end

    // left pixel
    d=d-1;
    t=impixel("imagename",c,d);if (t>121) m(c,d)=255; end
 end
end

这比边界循环版本的边界检查更少。