Bonjour tout le monde, j’espère que vous allez tous bien. C'est un peu long, mais c'est enrichissant (Reconnaissance de Forme).

Donc voilà, je suis débutant dans la plateforme Matlab et j'ai un souci avec une fonction que je dois programmer pour la division d'une image en blocs puis effectuer quelques opérations. Voici un extrait du but et la description étape par étape de la fonction qu'on veut programmer:

----------------------------------------------------------------------------------------------------------------------------------------------
Nom : principe.jpg
Affichages : 1131
Taille : 105,6 Ko Nom : etape.jpg
Affichages : 845
Taille : 178,7 Ko
----------------------------------------------------------------------------------------------------------------------------------------------


Là c'est le code où se trouve notre focntion zoneProjection(image,szWindow) Ligne 25 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
% Construire les bases de donnees d'apprentissage
clear all ; clc;
path = 'Database\Learning\';
nb_ex_class = 600;
 
% Zone-based Projection method
szWindow = 5;
szImageX = 60;
szImageY = 50;
 
nb_row = round(szImageX/szWindow);
nb_col = round(szImageY/szWindow);
szFeature = nb_row*nb_col+nb_row+nb_col;
% database
databaseZoneProject = zeros(nb_ex_class*10,szFeature);
% creat features
for i = 1:10
tic
fid = fopen([path 'listing_' num2str(i-1) '.txt'],'r');
for j = 1:nb_ex_class
tline = fgetl(fid);
image = imread([path num2str(i-1) '\' tline]);
image = imresize(image, [szImageX szImageY], 'bicubic');
image = 1-image; % foreground is white and background is black 
databaseZoneProject(nb_ex_class*(i-1)+j,:) = zoneProjection(image,szWindow);
labels(nb_ex_class*(i-1)+j) = i;
end
fclose(fid);
toc
end
 
save zoneProject_60x50x5_learning databaseZoneProject labels
Donc ce programme charge des images d'une base de donnée local qui contient 7000 images, 600 exemples/chiffre(0 à 9) = 6000 pour une partie d'entrainement de notre système, puis 100 exemples/classe(0 à 9) pour une partie de test. Puis il les images lu se converti en matrice binaire de 0 , 1

Là c'est ma fonction qui ne fonctionne pas ^^". On prend comme dimension de l'image nx= 60 x ny= 50 et la taille de nos blocs carrée 5x5
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
function output = zoneProjection(image,szWindow) %szWindow=5
 
[nx,ny] = size(image);  %% nx=60 et ny=50
 
 %%%%%%%%%%%%%%%%%%%%%%%%%% Division de l'image
 
 nb_row = round(nx/szWindow);    %% nb_row=12
 nb_col = round(ny/szWindow);     %% nb_col=10
 szFeature = nb_row * nb_col + nb_row + nb_col;
 
zr=0;zc=0;           %% zr et zc incrément pour la taille de nos blocs 
ll=1;cc=1;
M=zeros(nx/szWindow,ny/szWindow);
 
%%%%%%%%%%%%%%%%%%%%%%%%%% j'essai de parcourir mon image (gauche --> droite) 
 
for ii=1:szWindow:nx 
    for jj=1:szWindow:ny 
        for i=ii:(ii+szWindow-1) 
            zr=zr+1;
            for j=jj:(jj+szWindow-1) 
                zc=zc+1;
                z(zr,zc)=image(i,j);    %% j'essai d'enregistrer mes valeurs dans nos blocs
            end
            zc=0;
        end
        v=mean(sum(z));            %% calcul de la moyenne de notre bloc matrice
        M(ll,cc)=v;                     %% j'essai de mettre mes valeurs calculer de la moyenne de chaque bloc dans une nouvelle matrice (12x10)
        cc=cc+1;
        zr=0;
    end
     ll=ll+1; 
end
 %dr = mean(sum(M));
 %dc = mean(sum(M'));
 
 output=M;                             %% là j'ai une erreur MATLAB qui a une relation avec le 1er script et je ne c'est pas quoi faire
                                            %% ??? Subscripted assignment dimension mismatch. 
                                            %% Error in ==> DEMO_LAB_1 at 26
                                            %% databaseZoneProject(nb_ex_class*(i-1)+j,:) = zoneProjection(image,szWindow);
Bon ben j'espère que c'est bien expliquer et Merci