如何使用blockproc设置我的功能来处理部分图像?

时间:2015-03-10 19:50:29

标签: image matlab image-processing image-segmentation

我有一张图片:

enter image description here

我想将这个图像分成3个相等的部分并分别计算每个部分的SIFT,然后连接结果。

我发现Matlab的blockproc就是这么做的,但我不知道如何让它与我的功能一起工作。这就是我所拥有的:

[r c] = size(image);
            c_new = floor(c/3); %round it 

            B = blockproc(image, [r c_new], @block_fun)

因此,根据Matlabs文档,函数block_fun将以大小为rc_new的块应用于原始图像。

这就是我写的block_fun

function feats = block_fun(img)
[keypoints, descriptors] = vl_sift(single(img));
feats = descriptors;
end

那么,我的矩阵B应该是同一图像的所有三个部分的SIFT描述符的串联?正确?

但是我运行命令时得到的错误:

B = blockproc(image,[r c_new],@ block_fun)

  

函数BLOCKPROC在评估用户时遇到错误   提供功能手柄,乐趣。

     

错误的原因是:

     

无法使用单个转换为单个struct的错误。

2 个答案:

答案 0 :(得分:1)

此错误是由blockproc通过其句柄调用的函数需要块结构的事实引起的。

真正的问题是blockproc将尝试连接所有结果,并且每个块都有一组不同的128xN特征向量,blockproc不允许这样做。

我认为使用im2colreshape会更加简单。

答案 1 :(得分:1)

对于自定义功能,blockproc会将图像数据存储在名为data字段中。因此,您只需更改您的函数,以便它访问输入中的数据字段。像这样:

function feats = block_fun(block_struct) %// Change
[keypoints, descriptors] = vl_sift(single(block_struct.data)); %// Change
feats = descriptors;
end