2017-01-24 3 views
0

Dies ist mein Code für das Schneiden meines 512 * 512 Bildes in einen Würfel von 64 * 64 * 64 Dimension. aber wenn ich es wieder in ein 2D-Array umforme, warum gibt es mir nicht das ursprüngliche Bild.am mache ich etwas falsch bitte helfen.Bild Shuffling und 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

Es ist wichtig zu bestellen Sie die Scheiben kisten. Versuchen Sie, Zeilen- und Spaltenschleifen zu ändern. Zuerst für col und dann für row. –

+0

Durch einfaches Umschalten von Zeilen und Spalten wird der Code jedoch nicht repariert. – julian59189

+0

Ihre Formatierung der Matrix für Slicing ist nicht, was Umformung später erwarten wird, da MATLAB Funktion Umformen erwarten, dass Sie Column weise durchlaufen haben, aber Sie Ihren Würfel mit der Hälfte der columnwwn und Hälfte der Reihe weise Operation formulieren. Wenn Sie sich schließlich umformen, wird es falsch umgeformt – Zeeshan

Antwort

0

Nur ein kleiner Hinweis.

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 

So können Sie das Schneiden oder die Umformung auf eigene Faust ändern.

0

Wenn ich Ihre Frage richtig verstanden habe, können Sie in den folgenden Code schauen, um die gleiche Operation durchzuführen.

% 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) 

nb: Aus MATLAB Hilfe können Sie sehen, dass die reshape arbeitet spaltenweise

reshape (X, M, N) oder neu zu gestalten (X, [M, N]) gibt die M- by-N-Matrix , deren Elemente spaltenweise von X übernommen werden. Ein Fehler ergibt , wenn X keine M * N-Elemente enthält.