2009-07-21 5 views
-1

j'ai bmp dans le dossier d'image sur mon nom de computer.I il 1.bmp à 100.bmp .Toutes les taille est 576 * 768Accelerating chiffres de terrain d'économie que l'image bitmap dans Matlab

Je lis un Les coordonnées des pixels de la région rectangulaire changent de 182 à 281 verticalement et de 426 à 639 horizontalement. Je sauvegarde les graphiques qui représentent l'échange de valeurs de pixels entre les images dans toutes les coordonnées de pixels dans le rectangle. région à un autre fichier

fichier

Mon m est ci-dessous:

pixvalue=zeros(100); 
j=1 ;% will represent pixel coordinate sequence 
% find pizel coordinates in rectangular region 
for y=182:281 
     for x=426:639 
      for i=1:100 
      % read images 
     s = sprintf('C:\\images\\%d.bmp', i); 
     A = imread(s); 
     A=double(A); 
     pixvalue(i)= A(y,x); 
     end 
     s2=sprintf('%d.plot', j); 
     f=figure('visible','off'), 
     plot(pixvalue); 
     xlabel('images'); 
     ylabel('pixvalue'); 
     title(s2); 
     s3=sprintf('C:\\registration\\%d.bmp', j); 

     %% save figures as 8 bit bitmap to file 
     print(f,'-dbmp256',s3); 
     j=j+1; 
     end 
    end 

Malheureusement, ce code a fonctionné vey vey lent !! Comment puis-je l'accélérer?

Cordialement ...

Répondre

1

vous lisez la même image par (281-182) * (639-426) fois ..

peut-être vous devriez lire toutes les images avant cette boucle une fois. stocker dans une variable.

que vous devez faire ce que vous avez à faire ..

quelque chose comme:

for i=1:100 
    % read images 
    s = sprintf('C:\\images\\%d.bmp', i); 
    A(i) = imread(s); 
end 

for x=... 
    for y=... 
     for i=1:100 
      pixvalue(i)= A(i, y, x); 
     end 
    end 

     .. 
     .. 

en fait, je ne me rappelle pas la syntaxe Matlab très bien, mais vous devez lire tout celui de imagesin boucle avant cette grosse boucle. ici j'ai corrigé le code.

que dans la grande boucle que vous utilisez A (i) au lieu de A.

ps. par la façon dont je l'ai optimisé comme si le code précédent fonctionnait .. je n'ai pas un matlab maintenant pour essayer ..

+0

ufukgun, il y a un problème ici. Les images renvoyées par IMREAD sont des matrices 2-D (ou potentiellement 3-D). Vous auriez à les stocker dans un tableau multidimensionnel ou un tableau de cellules ... quelque chose comme ça pour les images en 2D: A (:,:, i) = imread (s); – gnovice

+0

oui vous avez raison. mais je pense qu'il devrait automatiquement le stocker dans un tableau multidimensionnel. en fait je n'ai pas matlab sur mon ordinateur maintenant, donc je réponds comme je me souviens .. – ufukgun

1

Votre code peut être divisé en deux parties. Tout d'abord, vous voulez charger les données d'image et enregistrer les valeurs de pixels d'une sous-région de chaque image. Cela peut être fait avec le code suivant:

subRegion = zeros(100,214,100); % 3-D matrix to store image subregions 
for i = 1:100, 
    s = ['C:\images\' int2str(i) '.bmp'];  % Create file name string 
    A = double(imread(s)); % Load image and convert to double precision 
    subRegion(:,:,i) = A(182:281,426:639); % Store subregion of image 
end 

Ensuite, il semble que vous voulez tracer les valeurs de chaque pixel sur toutes les images et la sortie de la parcelle à un fichier. C'est un lot de fichiers d'image (21,400!) Et est lié à prendre un certain temps pour fonctionner. Si vous êtes sûr que vous voulez faire, voici une façon:

j = 1; % Pixel index 
for y = 1:100, % Loop over rows 
    for x = 1:214, % Loop over columns 
    hFigure = figure('Visible','off'); 
    data = subRegion(y,x,:); % Get pixel value from all 100 images 
    plot(data(:)); 
    xlabel('images'); 
    ylabel('pixvalue'); 
    title(['Plot ' int2str(j)]); 
    outFile = ['C:\registration\' int2str(j) '.bmp']; 
    print(hFigure,'-dbmp256',outFile); % Save figure 
    j = j+1; 
    end 
end 
+0

plot (sous-région (y, x, :)); % Tracer la valeur de pixel de toutes les 100 images ici matlab a donné cette erreur: erreur en utilisant ==> plot Les données ne doivent pas avoir plus de 2 dimensions – yalcin

+0

J'ai corrigé le code. Le problème était que PLOT ne reconnaissait pas de matrice 1-by-1-by-3 en tant que vecteur, il doit donc être remodelé en premier. – gnovice