- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我喜欢blockproc
,它使处理大(非常大)图像变得容易。然而,据我所知,它仅限于使用与输入大小相同的输出矩阵的函数。
所以我想知道是否有一种方法可以复制/模拟 blockproc
所做的事情,但对于输出元胞数组 的函数。我们可以假设处理函数的输出数组与输入矩阵具有相同的维度,或者它只输出一个元胞元素,在这种情况下,总处理的最终输出将是一个包含 的元胞数组M x N
元素,其中 M
和 N
指定处理的平铺。
我相信我可以使用 cellfun
自己构建它,但我想知道是否有任何其他内置函数或库(也许是第三方?)我可以为此使用,甚至可以完全避免重新发明轮子。
更具体地说,我正在寻找与 blockproc
具有相同优势的东西:
blockproc
的界面(例如,# of tiles 等)最佳答案
除第一点外,以下是满足您标准的解决方案
使用 IM2COL 函数将图像中的不同图像 block 排列成列,然后将您的函数应用于每一列,将结果存储在元胞数组中。
当然这只有在所有 block 都适合内存时才有效,否则您将不得不手动编写代码一次提取一个 block 并以这种方式处理它......
%# read image
img = im2double(imread('tire.tif'));
%# blocks params
sizBlk = [8 8];
numBlk = ceil( size(img) ./ sizBlk );
%# extract blocks
B = im2col(img, sizBlk, 'distinct');
B = reshape(B, [sizBlk size(B,2)]); %# put blocks on the 3rd dimension
B = squeeze( num2cell(B,[1 2]) ); %# convert to cell array
B = reshape(B, numBlk); %# reshape as blocks overlayed on image
%# process blocks
myFcn = @(blk) [mean2(blk) std2(blk)]; %# or any other processing function
I = cellfun(myFcn, B, 'UniformOutput',false);
%# in this example, we can show each component separately
subplot(121), imshow( cellfun(@(c)c(1),I) ), title('mean')
subplot(122), imshow( cellfun(@(c)c(2),I) ), title('std')
或者,您仍然可以使用 BLOCKPROC 函数,但是您必须多次调用它,每次都计算一个特征:
%# compute one feature at a time
b1 = blockproc(img, sizBlk, @(b)mean2(b.data), 'PadPartialBlocks',true);
b2 = blockproc(img, sizBlk, @(b)std2(b.data), 'PadPartialBlocks',true);
%# combine into cellarray of features
II = arrayfun(@(varargin)[varargin{:}], b1, b2, 'UniformOutput',false);
%# compare to previous results
isequal(I,II)
关于matlab - 用于元胞数组输出的类似 Blockproc 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7286083/
我有这个函数来计算一个 3*3 block 的二进制模式的值,结果是用中心像素对 8 个相邻像素进行阈值处理并返回两个输出:二进制代码的十进制值,如果它是统一的则相同的十进制值如果不是,则为 59。
我喜欢blockproc ,它使处理大(非常大)图像变得容易。然而,据我所知,它仅限于使用与输入大小相同的输出矩阵的函数。 所以我想知道是否有一种方法可以复制/模拟 blockproc 所做的事情,但
我一直在使用 blockproc用于按 block 处理图像。不幸的是,blockproc 是图像处理工具箱的一部分,我的个人电脑上没有。 在基础 Matlab 中是否有可以替代 blockproc
编辑:这是一张图片,所以建议的 ( How can I efficiently process a numpy array in blocks similar to Matlab's blkproc
当我使用 blockproc 函数的这个参数时,我很难理解发生了什么: 当我尝试一个简单的函数时 fun = @(block) mean(mean(block.data)); im4 = blockp
在 Matlab 中,我有一个 3D 矩阵(超过 100 帧 512x512)。我的目标是通过整个超矩阵找到一些具有代表性的点。为此,我采用了传统的(效率不高的)方法:将大矩阵分割为更小的子矩阵,然后
Blockproc是在 MATLAB 中“网格化”图像的一个非常有用的函数。它有很好的文档记录,甚至还带有 tutorial page。 .但是,当您希望 block 之间有某种重叠时,事情就变得棘手
我正在寻找一种很好的方法来有效地将图像划分为小区域,分别处理每个区域,然后将每个处理的结果重新组合成一个处理后的图像。 Matlab 有一个名为 blkproc 的工具。 (替换为 blockproc
我是一名优秀的程序员,十分优秀!