Ce coup-ci, L'opération est encore faite sur les pixels contenus à l'intérieur du masque mais le résultat est donné par le plus grand nombre de valeur à 1 ou à 0. S'il y a une majorité de 1 alors le pixel résultant sera à 1, si ce sont les 0 qui sont majoritaires alors le pixel vaudra 0. L'opération est plutôt simple, nous comptons le nombre de pixels à 1 des pixels dans le masque s'il est supérieur à la moitié du nombre des pixels du masque arrondie au-dessus alors le pixel résultant vaut 1 sinon on le met à zéro.
function guimajorite
%translationfunction guihistogramme
clear all;
close all;
figure( 'name','majorité',...
'NumberTitle','off',...
'color',[0.3137 0.3137 0.5098]);
a(1)=axes('units','normalized',...
'position',[0.05 0.55 0.44 0.44]);
a(2)=axes('units','normalized',...
'position',[0.05 0.10 0.44 0.44]);
uicontrol( 'style','pushbutton',...
'string','load',...
'Position', [10 10 50 20],...
'callback',@loadimage);
uicontrol( 'style','pushbutton',...
'string','majorité',...
'Position', [100 10 50 20],...
'callback',@majorite);
uicontrol( 'style','popup',...
'string','ligne|colonne|croix|carre',...
'Min',0,'Max',4,...
'Position', [300 10 50 20],...
'callback',{@choix,'typemasque'});
uicontrol( 'style','popup',...
'string','1|2|3|4|5',...
'Min',0,'Max',4,...
'Position', [400 10 50 20],...
'callback',{@choix,'ordre'});
%parametre initial
setappdata(gcf,'k',8);
setappdata(gcf,'x',1);
setappdata(gcf,'typemasque',0);
setappdata(gcf,'ordre',0);
function loadimage(~,~)
% appeler quand appui check box
[filename, pathname] = uigetfile({'*.jpg;*.tif;*.png;*.gif;*.bmp','All Image Files';...
'*.*','All Files' },'mytitle',...
'C:\Work\myfile.jpg')
x = imread(filename);
axes(a(1))
imshow(x)
if (length(size(x))>2)
x=mean(x,3);% on prend une seul plan image noir et blanc chaque plan sont egaux
end
x=uint8(x);
k = whos('x');
if k.class == 'uint8'
k=8;
end
% on inverse l'image les objets sont noir
x=x/255;
setappdata(1,'k',k);
setappdata(1,'x',x);
end
function majorite(hObj,~)
typemasque = getappdata(1,'typemasque');
ordre = getappdata(1,'ordre');
if (ordre == 0 || ordre == 1)
ordre=1;
end
img = getappdata(1,'x');
k = getappdata(1,'k');
[ligne colonne]=size(img);
img2=zeros(ligne,colonne);
for i=ordre+1:ligne-ordre%attention aux debordement
for j =ordre+1:colonne-ordre%attention aux debordement
if (typemasque==0 || typemasque==1) %ligne
for o = -ordre : 1 : ordre
img2(i,j)=img2(i,j) + img(i+o,j);
end
elseif typemasque==2
for o = -ordre : 1 : ordre
img2(i,j)=img2(i,j) + img(i,j+o);
end
elseif typemasque==3
for o = -ordre : 1 : ordre
img2(i,j)=img2(i,j) + img(i+o,j) + img(i,j+o);
end
else
for o1 = -ordre : 1 : ordre
for o2 = -ordre : 1 : ordre
img2(i,j)=img2(i,j) + img(i+o1,j+o2);
end
end
end
end
end
if (typemasque==0 || typemasque==1)
taillemasque = 1 + 2*ordre;
elseif typemasque==2
taillemasque = 1 + 2*ordre;
elseif typemasque==3
taillemasque = 1 + 4*ordre;
else
taillemasque = ((ordre*2)+1)^2;
end
seuilmajorite=ceil(taillemasque/2);
for i = 1 : ligne
for j = 1 : colonne
if (img2(i,j)>seuilmajorite)
img2(i,j)=1;
else
img2(i,j)=0;
end
end
end
axes(a(2))
imshow(img2)
end
function choix(hObj,~,name)
% Called when user activates popup menu
val = get(hObj,'Value'); %0|1=ligne, 2=colonne, 3=croix, 4=carre
setappdata(1,name,val);
end
end
Copyright © 2010-2014, tous droits réservés, contact : operationpixel@free.fr