1 pièce(s) jointe(s)
Effectuer une analyse colorimétrique
les amis, je suis bloquée dans mon travail, j'ai des photos de larves de poissons sur les quelles je dois mesurer les nuances de bleu et les nuances de rouges séparément. je suis novice dans ce domaine , pouvez m'aider SVP . Ci joint une photo pour vous donner une idée et merci d'avance . Pièce jointe 539825
1 pièce(s) jointe(s)
Effectuer une analyse colorimétrique
Bonjour, :D
Tu pourrais commencer par un agrandissement de l'image sur une partie anatomiquement intéressante (ce dont je n'ai aucune idée):
puis effectuer une série de prélèvements de couleurs sur les régions concernées à l'aide de Paint (ou tout autre logiciel approprié), afin de disposer de données statistiques pour chacune des teintes.
Et que voudrais-tu faire par la suite ? Il faudrait donner des précisions.
2 pièce(s) jointe(s)
Effectuer une analyse colorimétrique
Tu peux déjà retirer le fond clair de l'image par la transformation qui à chaque pixel initial (r, v, b) fait correspondre le nouveau triplet d'entiers (r', v', b') résultant de la soustraction du plus petit des 3 indices:
r' = r - Min(r, v, b) ,
v' = v - Min(r, v, b) ,
b' = b - Min(r, v, b) ,
et dont l'un des termes est nécessairement nul.
En confirmation de la remarque de Nebulix, les couleurs apparaissant das la nouvelle image
ne sont pas exactement celles que tu annonces, mais plutôt le cyan et le violet.
Cela ne constitue aucun obstacle au dénombrement, en raison de la caractérisation très simple de chaque teinte:
r = 0 (pour le cyan, résultant de la superposition du bleu et du vert) ,
v = 0 (pour le violet, qui résulte de la superposition du bleu et du rouge) .
1 pièce(s) jointe(s)
Effectuer une analyse colorimétrique
Le corps de l'image Bitmap est représenté par une matrice de pixels:
Code:
1 2 3 4 5 6 7 8 9 10 11
|
CONST Dim_Max = 2100;
... / ...
TYPE Pixel = ARRAY[1..3] OF Byte;
Tab_Pix = ARRAY[0..Dim_Max, 0..Dim_Max] OF Pixel;
VAR Larg_Image, Haut_Image, T_Fichier, T_Image: Z_32; // Z_32 = LongInt
V_Fich_1, V_Fich_2: File OF Byte;
Matrice_1, Matrice_2: Tab_Pix;
... / ...
Icyan, Iviolet: Z_32 |
Voici un codage élémentaire, écrit en Pascal, pour le passage de la première matrice (image initiale, à fond clair) à la seconde (image sur fond noir):
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 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
| PROCEDURE Aff_I1I2;
CONST C1 = 4; L1 = 40; o = 10;
BEGIN
E(0015); Wt(C1, L1 - 1, 'Intensit totale du cyan: Ic = ');
E(0010); Write(Icyan:o);
E(0015); Wt(C1, L1 + 1, 'Intensit totale du violet: Iv = ');
E(0010); Write(Iviolet:o)
END;
PROCEDURE CalculI1I2(La, Ha: Z_32; VAR J1, J2: Z_32; VAR Ma2: Tab_Pix);
VAR s, S1, S2, Xm, Ym: Z_32; Px: Pixel;
BEGIN
S1:= 0; S2:= 0;
FOR Xm:= 0 TO (La - 1) DO
FOR Ym:= 0 TO (Ha - 1) DO
BEGIN
Px:= Ma2[Xm, Ym]; s:= Px[1];
Inc(s, Px[2]); Inc(s, Px[3]);
IF (s>0) THEN IF (Px[1]=0) THEN Inc(S1)
ELSE IF (Px[2]=0) THEN Inc(S2)
END;
J1:= S1; J2:= S2
END;
(*HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
Calcul de la seconde matrice
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH*)
PROCEDURE ZeroM(VAR Ma: Tab_Pix);
CONST Pzero: Pixel = (0, 0, 255);
VAR i, j: Z_32;
BEGIN
FOR i:= 0 TO Dim_Max DO
FOR j:= 0 TO Dim_Max DO Ma[i, j]:= Pzero
END;
PROCEDURE Calc_Mat_Im2(La, Ha: Z_32; VAR Ma1, Ma2: Tab_Pix);
VAR k, m: Byte; Xm, Ym: Z_32; Px1, Px2: Pixel;
BEGIN
ZeroM(Matrice_2);
FOR Xm:= 0 TO (La - 1) DO
FOR Ym:= 0 TO (Ha - 1) DO
BEGIN
Px1:= Ma1[Xm, Ym]; m:= Px1[1];
FOR k:= 2 TO 3 DO IF (m>Px1[k]) THEN m:= Px1[k];
FOR k:= 1 TO 3 DO Px2[k]:= Px1[k] - m;
Ma2[Xm, Ym]:= Px2
END
END; |
Tu traduiras facilement ces instructions.
Avec l'image proposée (maintenue à ses dimensions initiales 2088x473), le programme a conduit aux résultats suivants: