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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
| function ContageCellules
close all;
clear all;
vid = videoinput('winvideo', 2);
set(vid, 'ReturnedColorSpace', 'grayscale');
% c'est nécessaire pour passer de 768x1024x3 à 768x1024 pour pouvoir analyser l'image derrière
set(vid, 'SelectedSourceName', 'input1');
src_vid = getselectedsource(vid);
preview(vid);
% la preview se lance en grande fenêtre en même temps que
l'interface graphique permettant de sélectionner facilement une zone pour
ensuite prendre une photo.
handles(1)=figure('position',[100 100 1000 700],...
'Toolbar','none',...
'Menubar','none',...
'NumberTitle','Off',...
'Name','Video avec comptage de cellule');
handles(2)=uicontrol('Style', 'pushbutton',...
'String', 'Photo',...
'Units','normalized',...
'Position', [0 0 0.15 0.07],...
'Callback', '@prisephoto;');
% avec les sous fonctions du type nested je crois qu'il faut
appelé les fonction dans les callback @nomdelafonction.
handles(3)=uicontrol('Style', 'pushbutton',...
'String', 'Contage',...
'Units','normalized',...
'Position', [0.17 0 0.15 0.07],...
'Callback', '@contage;');
handles(4)=uicontrol('Style', 'pushbutton',...
'String','Close' ,...
'Units','normalized',...
'Position', [0.34 0 0.15 0.07],...
'Callback', '@fermer;');
handles(5)=uicontrol('Style', 'text',...
'String', '0',...
'Units','normalized',...
'Position', [0.85 -0.04 0.15 0.08],...
'tag','résultat');
handles(6)=subplot('Position', [0.54 0.2 0.45 0.65]);
handles(7)=subplot('Position', [0.04 0.2 0.45 0.65]);
% j'ai fait des sous fonctions du type nested mais cela ne
semble pas fonctionner, d'où vient le problème exactement? des noms des
sous-fonctions peut-être?
function [frame] = prisephoto(vid)
clear frame; % je voudrais pouvoir refaire une photo à chaque clique,
est-ce qu'effacer la précédente est nécessaire?
frame = getsnapshot(vid);
set(handles(6),imshow(frame)); % comment configurer l'endroit ou faire
apparaitre l'image?
colormap(gray); % il y a un problème au niveau des couleurs de l'image
affiché il faut donc les repasser en niveau de gris
end
function [nombreobjets] = contage(frame)
% est-il possible de mettre cornee1 pour toutes les matrices
intermédiaires ne comptant que sur l'ordre des commandes?
h = fspecial('unsharp');
cornee1 = imfilter(frame,h);
cornee2 = histeq (cornee1);
cornee3= medfilt2(cornee2,[3 3]);
cornee4 = imadjust(cornee3);
level = graythresh(cornee4);
cornee5 = im2bw(cornee4,level);
[labeled,numObjects] = bwlabel(cornee5,4);
nombreobjets = numObjects;
set(handles(5),'string', num2str(nombreobjets));
% même problème, comment faire pour afficher le nombre
d'objets dans la fenêtre de type text?
set(handles(7), imshow(cornee6)); %
% pour afficher le nombre d'objet on peut voir qu'il y a 'string'
qui indique probablement qu'il faut remplacer le string du handle(5) y a t'il un
équivalent pour dire ou mettre les images?
end
function fermer
close all;
delete(vid);
clear vid;
end
end |
Partager