I는 임의의 크기 및 ROWS
COLS
의 이미지를 갖는다. 나는 타일로 임의하지만 일정한 보폭 stride = [strideR, strideC]
주어진 임의하지만 일정한 크기 blockSize = [blockSizeR, blockSizeC]
의 패치로이 이미지를 원한다. 행 또는 열 방향 시대에 패치의 수는 각각의 블록 크기는 각각 행이나 열,의 수와 일치하지 않는 경우 (예비 행이나 열이 있다면 즉), 내가 그들 (걱정하지 않는다 즉, 그들은 할 수있다 무시 됨). 이미지가 왼쪽 상단 픽셀에서 시작하여 이미지에 완전히 들어 맞는 가능한 모든 패치로 바둑판 식 배열되어 있으면 충분합니다.MATLAB의 임의의 보폭에서 (일정한) 임의의 크기의 패치로 이미지를 어떻게 바꿀 수 있습니까?
웹 주위에 떠 다니는 가능한 솔루션이 있지만 일부는 중복을 허용하지 않으며 일부는 여분의 행이나 열이있는 경우 출력을 허용하지 않으며 일부는 for 루프를 비효율적으로 사용합니다.
%img: source image
stride = [5, 5]; %height, width
blocksize = [11, 11]; %height, width
tilescount = (size(img(:, :, 1)) - blocksize - 1)/stride + 1;
assert(all(mod(tilescount, 1) == 0), 'cannot divide image into tile evenly')
tiles = cell(tilescount);
tileidx = 1;
for col = 1 : stride(2) : size(img, 2) - blocksize(2)
for row = 1 : stride(1) : size(img, 1) - blocksize(1)
tiles{tileidx} = img(row:row+stride(1)-1, col:col+stride(2)-1, :);
tileidx = tileidx + 1;
end
end
그러나, 또한 어떤 여분의 행이나 열이없는 경우에만 작동하는 것 같다 :
내가 원하는 것과 가장 가까운 것은 아마도 https://de.mathworks.com/matlabcentral/answers/330357-how-do-i-store-a-series-of-rgb-images-in-a-2d-array에 게시 된 솔루션입니다. 이를 임의의 채널 수 (단일 채널 이미지와 RGB 이미지 모두에 적용하려고 함)가있는 이미지에 대한 효율적인 솔루션에 어떻게 적용 할 수 있습니까?