【问题标题】:Getting spatial ranges or cuts from a 2d matrix or an image从二维矩阵或图像中获取空间范围或切割
【发布时间】:2014-06-19 18:08:34
【问题描述】:

我想用以下格式标记和调用图像的某些部分,因为到目前为止我一直在 1024 正方形图像上使用 4 个块。虽然有一些路径可以使用,其中涉及很多循环,我正在寻找一种有效的方法来将其推广到具有不同块长度的不同大小的图像而不会丢失标签。 p>

我也想在做一些操作后合并它们。

除此之外,请求的块将始终是方形的,长度将始终与原始图像完全成比例。换句话说,我不会尝试将 1024x1024 图像划分为 612x612 块。但我可能想像下面的脚本一样将它分成 512x512 块,或者 256,128,64,..

切割范围是静态的,仅适用于 512 个正方形大小的 4 个块。我想避免循环和增量搜索。

这是我目前使用的脚本:

function y=img_divider(z,img_block)

%divides the input image into 4 blocks of the following composition for 1024x1024 inputs. Returns the block called with img_block. 
% | 1 | 2 |
% |---|---|
% | 3 | 4 |

if img_block==1
y=z(1:512,1:512,:);
end
if img_block==2
y=z(1:512,513:1024,:);
end
if img_block==3
y=z(513:1024,1:512,:);
end
if img_block==4
y=z(513:1024,513:1024,:);
end

return;

我想在这个问题的帮助下开发的内容类似于:

function y=img_divider(z,img_block,n)

% | 1 | ... | sqrt(n) |
% |---|---|...|
% |...|...|...|
% |...| ... |n |

bs=size(z,1)/sqrt(n)
if img_block==1
y=z(1:bs,1:bs,:);
end
...
...
if img_block==n
y=z(size(z,1)-bs+1:size(z,1),:),size(z,1)-bs+1:size(z,1),:);
end

【问题讨论】:

  • 您现在执行此操作的方式有什么问题?这个问题不清楚。如果您想要多个块大小,您希望函数如何工作?如何调用块等?您需要明确定义您想要什么以及为什么上面的代码不合适。
  • 编辑了文本,使问题更加明显。
  • 只是将某些行加粗似乎并不能使问题更清楚。让我们看看它是否适用于您:您现在执行此操作的方式有什么问题? 或者,您希望如何执行此操作(举个例子)
  • 我相信这个问题现在更清楚了,感谢您的 cmets。
  • 你为什么对你的代码不满意?

标签: matlab image-processing matrix block region


【解决方案1】:

试试这个 -

function y=img_divider(z,img_block,n)

n2 = sqrt(numel(z)/n);
block_lens = n2*ones(1,size(z,1)/n2);
t1 = mat2cell(z,block_lens,block_lens)'; %%//'
y = cell2mat(t1(img_block));

return;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多