2017-01-24 4 views
0

Это мой код для нарезания моего 512 * 512 изображений в кубе размером 64 * 64 * 64. но когда я снова преобразую его в 2D-массив, почему он не дает мне оригинальный image.am, я делаю что-то неправильное, пожалуйста, помогите.image shuffling and slicing

clc; 
Image=imread('C:\Users\Farhan\Documents\lena_gray.gif'); 
[y,ymap]=imread('C:\Users\Farhan\Documents\lena_gray.gif'); 
im=ind2gray(y,ymap); 
% im=imresize(im,0.125); 
[rows ,columns, colbands] = size(im) 

blockSize = 64; 


image3d = zeros(64, 64, 64); 

sliceNumber = 1; 


for row = 1 : 64 : 512 

for col = 1 : 64 : 512 

    row1 = row; 
    row2 = row1 + blockSize - 1; 
    col1 = col; 
    col2 = col1 + blockSize - 1; 

    oneBlock=im(row1:row2,col1:col2); 


    subplot(64, 64, sliceNumber); 
    imshow(oneBlock); 
    image3d(:, :, sliceNumber) = oneBlock; 
    sliceNumber = sliceNumber + 1; 

    end 

    end 
    image3d=reshape(image3d,512,512); 
    figure,imshow(uint8(image3d)); 
+0

Существует важное значение для заказа ящиков с кусочками. Попробуйте изменить строки строк и столбцов. Сначала сделайте для col и, чем для строки. –

+0

Но просто переключение строк и столбцов не исправляет код. – julian59189

+0

Ваше форматирование матрицы для нарезки - это не то, что изменится позже, потому что функция MATLAB изменит формулу, ожидая, что вы пройдете по coloumn мудрый, но вы формулируете свой куб наполовину пополам и половину строки. Поэтому, когда вы, наконец, переделываете назад, он меняет неправильную форму – Zeeshan

ответ

0

Просто небольшой совет.

P(:,:,1) = [0,0;0,0] 
P(:,:,2) = [1,1;1,1] 
P(:,:,3) = [2,2;2,2] 
P(:,:,4) = [3,3;3,3] 

B = reshape(P,4,4) 

B = 

    0  1  2  3 
    0  1  2  3 
    0  1  2  3 
    0  1  2  3 

Таким образом, вы можете изменить нарезку или выполнить переделку самостоятельно.

0

Если я правильно понял ваш вопрос, вы можете изучить приведенный ниже код для выполнения той же операции.

% Random image of the provided size 512X512 
imageX = rand(512,512) 
imagesc(imageX) 

% Converting the image "imageX" into the cube of 64X64X64 dimension 
sliceColWise = reshape(imageX,64,64,64) 
size(sliceColWise) 

% Reshaping the cube to obtain the image original that was "imageX", 
% in order to observe that they are identical the difference is plotted 
imageY = reshape(sliceColWise,512,512); 
imagesc(imageX-imageY) 

нб: С помощью MATLAB вы можете увидеть, что Reshape работает колонок мудрого

Reshape (X, M, N) или изменить (X, [M, N]) возвращает M- by-N , элементы которого берутся по столбцам из X. Результаты ошибки , если X не содержит элементов M * N.