Le but est de faire apparaitre les changements entre deux images. La méthode est plutôt simple puisqu'il s'agit de faire la différence entre les deux images et ce pour chaque pixel. La soustraction de deux pixels identiques donnera un résultat nul (du noir) et deux pixels différents donnera un résultat non nul, un niveau de gris qui dépendra de combien la différence de deux pixels est grande.
clear all; close all;
[filename, pathname] = uigetfile({'*.jpg;*.tif;*.PNG;*.gif;*.bmp','All Image Files';...
'*.*','All Files' },'img1',...
'C:\Work\myfile.jpg') % récuperation du chemin du fichier première image
img1 = imread(filename); % récuperation des données
if (length(size(img1))>2)% si l'image en niveau de gris est sur 3 composantes couleurs
img1=img1(:,:,1);% on prend un seul plan
end
[filename, pathname] = uigetfile({'*.jpg;*.tif;*.PNG;*.gif;*.bmp','All Image Files';...
'*.*','All Files' },'img2',...
'C:\Work\myfile.jpg') % récuperation du chemin du fichier seconde image
img2 = imread(filename); % recuperation des données
if (length(size(img2))>2)% si l image en niveau de gris est sur 3 composantes couleurs
img2=img2(:,:,1);% on prend un seul plan
end
k=8;
[ligne colonne]=size(img1);%taille de la matrice
image_result=uint8(zeros(ligne,colonne));
for i = 1: ligne
for j = 1 : colonne
if img1(i,j)>=img2(i,j)
image_result(i,j)= img1(i,j)-img2(i,j);
else
image_result(i,j)= img2(i,j)-img1(i,j);
end
end
end
% affichage
figure(1)
subplot(221)
imshow(img1)
subplot(222)
imshow(img2)
subplot(223)
imshow(image_result)
Comme nous somme en numérique, il faut faire attention aux débordements.
Si nous soustrayons un pixel p1 supérieur à p2 tout va bien. En revanche, si p1 est inférieur à p2 le résultat sera un nombre négatif.
Ceci pose un problème car il ne sera pas bien représenté par rapport aux bits d'origine (Gros problème si l'octet est non signé). Regardez les problèmes
engendrés.
Copyright © 2010-2014, tous droits réservés, contact : operationpixel@free.fr