Bonjour à tous,

Ce premier post sur ce forum afin d'obtenir quelques éclaircissements sur le projet que je suis entrain de mener. Il s'agit tout simplement de suivre la méthode proposée par cet article ([]) et de le reproduire sur Matlab afin de pouvoir détecter les couleurs présentes sur chaque facette d'une photo de rubik's cube.

L'application d'un filtre passe haut à mes différentes composantes de couleurs et le seuillage à été fait. J'obtiens donc une image binaire dont je dois pouvoir extraire chaque facette grâce à bwlabel().
Cependant, une partie des contours latéraux n'est pas accentuée dans la première partie du traitement et donc je n'arrive pas à obtenir ces zones indépendamment (CF capture bwlabel).

Si quelqu'un peut donc m'éclairer sur la conduite à tenir pour modifier cette image de la bonne manière.


Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
clear all;
close all;
pkg load image;
 
im=imread("image3.jpg"); %image à traiter
taille = size(im); %dimension de l'image
 
%------------------------------------------------------------------------------%
%-------------------------------Etape 1----------------------------------------%
%------------------------------------------------------------------------------%
 
%Composantes R V B
c_r = zeros(size(im),class(im));
c_r(:,:,1)=im(:,:,1);
c_v = zeros(size(im),class(im));
c_v(:,:,2)=im(:,:,2);
c_b = zeros(size(im),class(im));
c_b(:,:,3)=im(:,:,3);
 
%Application du filtre passe haut
k=fspecial('unsharp',0.2); %renforcement des frontières entre les facettes
c_r_ph=imfilter(c_r,k,'same');
c_v_ph=imfilter(c_v,k,'same');
c_b_ph=imfilter(c_b,k,'same');
 
%Conversion en niveau de gris puis somme des composantes
rg=rgb2gray(c_r_ph);
vg=rgb2gray(c_v_ph);
bg=rgb2gray(c_b_ph); 
 
%Application du seuillage aux images en niveau de gris
l1=graythresh(rg); %calcul du niveau de seuil adapté
Rgs=im2bw(rg,0.1);  %composante R filtrée et seuillée en ndg
 
l2=graythresh(vg); %calcul du niveau de seuil adapté
Vgs=im2bw(vg,0.1); %composante V filtrée et seuillée en ndg
 
l3=graythresh(bg); %calcul du niveau de seuil adapté
Bgs=im2bw(bg,0.1); %composante B filtrée et seuillée en ndg
 
imreduite= bwareaopen(Rgs + Vgs + Bgs,500);
labels= bwlabel(imreduite);
figure(1)
imshow(vislabels(labels));
Nom : rubik's cube.jpg
Affichages : 118
Taille : 94,1 Ko
Nom : Capture d’écran 2020-04-21 à 14.02.23.png
Affichages : 95
Taille : 41,5 Ko

De plus je voudrais savoir comment passer le fond de l'image binaire en noir c'est à dire le label 13 de la capture d'écran (bien entendu sans les facettes du rubis's cube)?


En espérant avoir été suffisamment clair,
Cordialement.