【发布时间】:2014-09-04 21:17:02
【问题描述】:
我有大量的显微图像,每张图像都有数百个点 (ROI)。这些点在空间中是固定的。我想从每个图像中提取每个点并保存到工作区中,以便进一步分析它们。
我自己编写了一个代码,它运行良好,但速度太慢。从每张图像中完全读出所有点大约需要 250 秒。
我的代码核心如下:
for s=1:NumberImages
im1=imread(fn(s,1).name);
im=im1-medfilt2(im1,[15,15]);
for i=1:length(p_g_x)
GreenROI(i,s)=double(sum(sum(im(round(p_g_y(i))+(-2:2), round(p_g_x(i))+(-2:2)))));
RedROI(i,s)=double(sum(sum(im(round(p_r_y(i))+(-2:2), round(p_r_x(i))+(-2:2)))));
end
end
从代码中可以看出,我正在提取 5x5 区域。 p_g_x 的长度在 500-700 之间。
感谢您的意见。我使用配置文件查看器来确定究竟哪个功能需要更多时间。它是中值滤波器,需要花费大量时间(~90%)。
任何加快速度的建议将不胜感激。
谢谢
马希帕尔
【问题讨论】:
-
您在 5x5 区域上求和,而不是 4x4...
-
区域是否重叠?
-
请使用您在
p_g_x和p_g_y中使用的值编辑您的问题。如果太大,请添加一个同样有效的较小样本。 -
length(p_g_x)的值是多少?如果它非常大,您可以使用integral image。网上应该有 Matlab 的实现。 -
感谢指正。它实际上是 5x5 像素。 p_g_x 的长度在 500 左右,理想情况下区域不重叠。