Catégories
Algorithme Matlab projet matlab Projets traitement d'image Traitement du signal sur matlab

Traitement d’image – Le produit de convolution 2D

Objectifs

  • Savoir Comment calculer le produit de convolution 2D
  • Connaitre le problème des bords
  • Savoir gérer les bords d’une image
  • Exemple: Filtre Moyenneur
  • Etc.

Calcul du produit de convolution (sans gestion des bords)

Voir le tuto pour plus de détails

calcul du produit de convolution

clear all; close all; clc;

%% Lecture
im_rgb= imread('onion.png');
% im_rgb= imread('peppers.png');
im_1=im2double(im_rgb);
im_in_0=rgb2gray(im_1);


%% Produit de convolution 2D

% Masque / Filtre nxn
p=11; n=2*p+1; % 3x3
H=ones(n,n)/n^2;

% Calcul du produit
im_in=im_in_0;

[M, N]=size(im_in);
im_out_1=0*im_in;
im_out_2=0*im_in;
im_out_3=0*im_in;


% Technique 1
for i=p+1:M-p
for j=p+1:N-p
im0=im_in(i-p:i+p, j-p:j+p); % nxn
im1=im0.*H;
%im_out_1(i,j)=sum(im1(:));
% Ou bien
im_out_1(i,j)=sum(sum(im1));
end;
end;

% Technique 2
for i=1:M-n
for j=1:N-n
im0=im_in(i:i+n-1, j:j+n-1);
im1=im0.*H;
im_out_2(i,j)=sum(sum(im1));
end;
end;

% Technique 3
for i=n+1:M
for j=n+1:N
im0=im_in(i-n+1:i, j-n+1:j);
im1=im0.*H;
im_out_3(i,j)=sum(sum(im1));
end;
end;


%% Affichage

figure(1);
subplot(141); imshow(im_in_0);title('Originale');
subplot(142); imshow(im_out_1); title('Centré');
subplot(143); imshow(im_out_2); title('Avance');
subplot(144); imshow(im_out_3); title('Arrière');

Calcul du produit de convolution (avec gestion des bords)

Voir le tuto pour plus de détails

calcul du produit de convolution avec les bords

clear all; close all; clc;

%% Lecture


im_rgb= imread('onion.png');
% im_rgb= imread('peppers.png');
im_1=im2double(im_rgb);
im_in_0=rgb2gray(im_1);

%% Produit de convolution 2D


% Masque / Filtre
p=10; n=2*p+1;
%H=ones(n,n)/n^2;
H=randi(n,n); H=H/sum(H(:));

% Calcul du produit
im_in1=padarray(im_in_0,n);
im_in2=padarray(im_in1',n);
im_in3=im_in2';

[M, N]=size(im_in3);
im_out_1=im_in3;
im_out_2=im_in3;
im_out_3=im_in3;


% Technique 1
for i=p+1:M-p
for j=p+1:N-p
im0=im_in3(i-p:i+p, j-p:j+p);
im1=im0.*H;
%im_out_1(i,j)=sum(im1(:));
% Ou bien
im_out_1(i,j)=sum(sum(im1));
end;
end;

% Technique 2
for i=1:M-n
for j=1:N-n
im0=im_in3(i:i+n-1, j:j+n-1);
im1=im0.*H;
im_out_2(i,j)=sum(sum(im1));
end;
end;

% Technique 3
for i=n+1:M
for j=n+1:N
im0=im_in3(i-n+1:i, j-n+1:j);
im1=im0.*H;
im_out_3(i,j)=sum(sum(im1));
end;
end;


im_out_1=im_out_1(n+1:end-n,n+1:end-n);
im_out_2=im_out_2(n+1:end-n,n+1:end-n);
im_out_3=im_out_3(n+1:end-n,n+1:end-n);


% Conv2D Matlab
im_out_4=conv2(im_in_0,H,'same'); % 'same', 'full',



%% Affichage

figure(1);
subplot(221); imshow(im_in_0);title('Originale');
subplot(222); imshow(im_out_1); title('Centré');
subplot(223); imshow(im_out_2); title('Avance');
subplot(224); imshow(im_out_3); title('Arrière');



figure(2);
subplot(121); imshow(im_out_1);title('Conv2 Centré');
subplot(122); imshow(im_out_4); title('Conv2 Matlab');

% Erreur entre les deux techniques
e=im_out_1-im_out_4; e=e(:);
figure(3); plot(e);

Accueil l Image | Matlab

Laisser un commentaire