gpt4 book ai didi

performance - Matlab:高效的图像 block 提取

转载 作者:太空宇宙 更新时间:2023-11-03 19:55:42 26 4
gpt4 key购买 nike

我有一大组图像,我希望从中提取图像 block 。补丁大小均匀,并在规则的网格点处从每个图像中提取。我可以使用以下代码执行此操作:

for n = 1:nImages
% Read image
imageFile = imageFiles{n};
I = imread(imageFile);

% Grid point locations
height = size(I, 1);
width = size(I, 2);
border = floor(patchSize/2);
centres = gridPoints(height, width, nPointsX, nPointsY, border);

% Extract and process patches
for p = 1:nPatches
% Patch location
x = centres(p, 1);
y = centres(p, 2);
% Top-left point of patch
x = x - floor(patchSize/2) + 1;
y = y - floor(patchSize/2) + 1;

% Extract patch -- BOTTLENECK!
patch = imcrop(I, [x y patchSize-1 patchSize-1]);

% Process patch
% ...
end
end

此代码非常低效,尤其是考虑到大量图像和大量网格点(我也在为每张图像以不同比例执行此操作)。我运行了 Matlab 的分析器,发现 imcrop 是造成这种低效率的原因。仅在 50 张图像上运行(但具有 3 个尺度的 100 x 100 个网格点)耗时 756 秒。

是否有另一种方法可以在 Matlab 中提取图像 block 而不会产生如此巨大的处理开销?

最佳答案

下标索引是 MATLAB 中的自然操作。

patch = I(y:y+patchSize-1, x:x+patchSize-1);

考虑到 imcroprect = [x y patchSize-1 patchSize-1] 给出 patchSize-1< 的正方形维度的问题中违反直觉的使用 x patchSize-1 应确认上述命令的输出大小对于您的目的是正确的。

编辑:对于 RGB(或任何平面多 channel 格式):

patch = I(y:y+patchSize-1, x:x+patchSize-1, :);

关于performance - Matlab:高效的图像 block 提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19085677/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com