【发布时间】:2011-05-18 23:54:04
【问题描述】:
我在 MATLAB 中编写了以下代码来处理大约 3000x2500 像素的大图像。目前该操作需要半个多小时才能完成。是否有任何改进代码以减少时间的余地?我听说并行处理可以使事情变得更快,但我不知道如何实现它。给定以下代码,我该怎么做?
function dirvar(subfn)
[fn,pn] = uigetfile({'*.TIF; *.tiff; *.tif; *.TIFF; *.jpg; *.bmp; *.JPG; *.png'}, ...
'Select an image', '~/');
I = double(imread(fullfile(pn,fn)));
ld = input('Enter the lag distance = '); % prompt for lag distance
fh = eval(['@' subfn]); % Function handles
I2 = uint8(nlfilter(I, [7 7], fh));
imshow(I2); % Texture Layer Image
imwrite(I2,'result_mat.tif');
% Zero Degree Variogram
function [gamma] = ewvar(I)
c = (size(I)+1)/2; % Finds the central pixel of moving window
EW = I(c(1),c(2):end); % Determines the values from central pixel to margin of window
h = length(EW) - ld; % Number of lags
gamma = 1/(2 * h) * sum((EW(1:ld:end-1) - EW(2:ld:end)).^2);
end
输入滞后距离通常为1。
【问题讨论】:
-
你的电脑有多少内存?并行处理和其他方法都以执行速度换取内存使用。另外,您是否在图像上运行除变异函数以外的函数?
-
我的电脑有 2.5 GB 的 RAM 和运行 Ubuntu 11.04、64 位的 Intel 双核处理器。我运行其他类似的函数来计算方向变异函数,但一次只运行一个函数。
-
图片是什么数字格式?
double? -
它们是 tiff 格式的 8 位图像(我研究区域的 LANDSAT 卫星图像子集)。
-
不同的操作系统处理 Matlab 的方式不同。对于数字运算,Windows 和 Linux 差不多。对于图像处理,Linux 破坏了竞争。 Mac总体上是坏的。在同一台计算机上,当我运行 Matlab 基准(bench)时,Windows 7 得分为 65,我的 linux 得分为 110
标签: matlab performance parallel-processing