0

目前,我正在使用下面的代码将图像分割成 cellSizeX 像素乘以 cellSizeY 像素的网格:

    grid = zeros(cellSizeX, cellSizeY, ColorCount, cellTotalX, cellTotalY);
    for i = 1:cellSizeX:(HorRowCount)        
        for j = 1:cellSizeY:(VertColumnCount)
                try
                    grid(:,:,:,icount, jcount) = img(i:i+cellSizeX-1, j:j+cellSizeY-1, :);
                catch

                end

            jcount = jcount + 1;

        end
        icount = icount + 1;
        jcount = 1;
    end

虽然这段代码运行良好且令人满意,但有些事情让我烦恼:

  1. 通过对 tic 和 toc 的一些测试,比较诸如 grid(:,:,:,icount,jcount) 和 grid(icount,jcount,:,:,:) 之类的切换索引位置,我看到了 grid(:,:,: ,icount,jcount) 是最快的。但是这里有什么可以改进的吗?

  2. 仅当请求的 cellSizeX 和 cellSizeY 与图像 img 成比例时,该代码才有效。因此,在尺寸为 40 x 40 的图像上请求 9 x 9 的 cellSizeX 和 cellSizeY 将导致 matlab 抱怨超出矩阵的尺寸。对此有何建议?我不想简单地为这些单元格填写空白区域。这些单元将在 Vlfeat SIFT 中进一步使用。

4

1 回答 1

1
  1. 如何将图像转换为每个单元格大小为 CellSizeX x CellSizeY x ColorCount 的单元格数组,然后将所有这些单元格堆叠到单个数组网格中?

    ca = mat2cell( img, cellSizeY * ones(1, cellTotalY), ...
    cellSizeX * ones(1, cellTotalX), ...
    ColorCount );
    grid = reshape( cat( 4, ca{:} ),...
    cellSizeX, cellSizeY, ColorCount, cellTotalX, cellTotalY);

  2. 图像处理社区习惯于根据边界处图像的值用非零值填充图像。查看函数padarray以获取更多信息。您可以填充输入图像,使其填充大小与 CellSizeX 和 CellSizeY 成比例(两个轴的填充不必相同)。

于 2012-11-25T18:49:27.573 回答