Bonjour,
je souhaiterai faire roter un ES de type strel
C'est possible via rot90, mais ca limite les angles de rotation.
Je vais le coder, mais peut etre y as t il une facon direct de le faire ...
ImagingAll
Version imprimable
Bonjour,
je souhaiterai faire roter un ES de type strel
C'est possible via rot90, mais ca limite les angles de rotation.
Je vais le coder, mais peut etre y as t il une facon direct de le faire ...
ImagingAll
Bonjour,
quel element structurant précisément?
un element type rectangle ...
Pour faire une ouverture par des segments de droite d'épaisseur.Code:b1 = strel('line',50,2);
ImagingAll
Bonjour;
Tu peux par exemple utiliser imrotate :
Code:>> doc imrotate
Merci Dut,
Ca donne ca avec une tite fonction, mais c'est un peu lourd en calcul...
Bonne journée,Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 function [IMGout] = RadialOpenrect_SA(IMG,len,wid,step,affichages) % INPUT % [IMGout] = RadialOpenrect_SA(IMG,len,wid,step,affichages) % affichages: show image result if ==1 IMGout=im2uint8(zeros(size(IMG))); for x=0:step:180 deg = x; nhood = ones(wid,len); nhood = imrotate(nhood,deg); nhood = logical(nhood); se = strel('arbitrary', nhood); radialopen=imopen(IMG,se); RadialopeningIMG=max(im2uint8(IMGout),im2uint8(radialopen)); end if (affichages==1) figure, imshow(RadialopeningIMG); else end end
ImagingAll
Dans un premier temps, la boucle devrait pouvoir se simplifier ainsi :
Code:
1
2
3
4
5
6
7
8
9
10
11
12 nhood = ones(wid,len); nhood = logical(nhood); n = round(180/step); deg = linspace(0,180,n); for k = 1:n nhoodk = imrotate(nhood,deg(n),'nearest'); se = strel('arbitrary', nhoodk); radialopen = imopen(IMG,se); RadialopeningIMG = max(im2uint8(IMGout),im2uint8(radialopen)); end
oui c'est un peu plus rapide et sans cette coquille:
deg(n)->deg(k)
Ca donnne ca:
ImagingAllCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 nhood = ones(wid,len); nhood = logical(nhood); n = round(180/step); deg = linspace(0,180,n); for k = 1:n nhoodk = imrotate(nhood,deg(k),'nearest'); se = strel('arbitrary', nhoodk); radialopen = imopen(IMG,se); RadialopeningIMG = max(im2uint8(IMGout),im2uint8(radialopen)); end if (affichages==1) figure, imshow(RadialopeningIMG); else end
L'autre solution consiste à pré-calculer les éléments structurants (si possible) et à les stocker sous forme d'un tableau de cellules dans un fichier mat qui serait appelé en début de fonction (comme une sorte d'abaque).
Cela économiserait les fonction IMROTATE et STREL dans la boucle FOR-END
Avec les images en niveau de gris ... c'est super long.
Alors je nettoie.
ImagingAll