Demo entry 6626456

hghg

   

Submitted by anonymous on Jun 25, 2017 at 10:47
Language: Python 3. Code size: 3.8 kB.

import imageio as ii
import matplotlib.pyplot as plt
import numpy as np
import os

path="G:\TIPE\\video vert"
liste=os.listdir(path)
debut=11
#première image
fin=len(liste)-2
#dernière image


d=35
#permet de faire varier la précision de détection du vert(difference entre composante verte et bleue a partir de laquelle un pixel est détecté comme contenant de l'encre)
duree_exp=10*60#durée de l'expérience en secondes, permet d'avoir un temps en abcisse(si 0 alors affichage du n° de l'image en abcisse)


def crop(image):#rognage
    return(image[170:505,1345:1670,:])


def img(numero):
    return(crop(ii.imread(path+"\\"+liste[numero])))


##img_ref=img(-1)
s=img(0).shape


def b_colors(image):
    bw_img=(image[:,:,1]>(image[:,:,2]+d))##création d'une image en noir et blanc
    nbre_pixels_noirs=np.sum(bw_img)
    bw4=image*bw_img[:,:,np.newaxis]#on cree une image en niveaux de gris des particules de couleur detectées
    return(np.array(bw4,dtype=np.uint8),nbre_pixels_noirs)#uint8->format reconnu par imshow pour les images, sinon pb de couleur ou d'affichage


def afficher(n,bool_afficher):
    """
    Entree=n° de l'image à afficher
    Fonction=afficher l'analyse de l'image n
    """
    im_coloree=b_colors(img(n))

    if bool_afficher:
        plt.imshow(img(n))#affiche l'image non analysée
        plt.show()

        plt.imshow(im_coloree[0]*(-1)+255)#affiche l'image analysée
        plt.show()
        print("Poucentage d'occupation de la tâche verte =")
    return(im_coloree[1]*100/(((s[0]+s[1])/2)**2*np.pi/4))


def aff(n):#le True est mis par defaut-> affichage des images voulues plus facile
    return(afficher(n,True))


def proportions(nb_echantillons,bool_afficher):
    """
    Entree=nb_echantillons a analyser,booleen pour afficher les images traitées ou  non
    Fonction=Trace un graphique du pourcentage de pixels ou de l'encre a été détecté en fonction du numéro de l'image qui est proportionnelle au temps
    """
    p=[]
    i=0
    num_images=np.linspace(debut,fin,nb_echantillons,dtype=int)
    for num in num_images:
        p+=[afficher(num,bool_afficher)]
        if bool_afficher:
            print(i," -> ",p[i])
        i+=1
    #print(p)
    if duree_exp != 0:
        abcisse=np.array(num_images,dtype=float)*duree_exp/(60*len(liste))#temps
        x_label="Temps (en min)"
    else:
        abcisse=num_images
        x_label="Numéro de l'image"

    y_label="Occupation sufacique de l'encre (en %)"
    plt.plot(abcisse,p)#tracé du graphique
    plt.title("Proportion en surface de l'encre au cours de l'expérience")
    plt.xlabel(x_label)
    plt.ylabel(y_label)
    plt.show()
    return()

def conservation(nb_echantillons):
    '''
    Affiche un graphique de la moyenne de la valeur en composante verte des pixels détectés pour chaque image et la valeur moyenne
    '''
    p=[]
    num_images=np.linspace(debut,fin,nb_echantillons,dtype=int)
    print(num_images)
    for num in num_images:
        vert=b_colors(img(num))
        p.append(np.sum(vert[0][:,:,1])/vert[1])
    p=np.array(p,dtype=int)
    if duree_exp != 0:
        abcisse=np.array(num_images,dtype=float)*duree_exp/(60*len(liste))#temps
        x_label="Temps (en min)"
    else:
        abcisse=num_images
        x_label="Numéro de l'image"
    y_label="Moyenne de la valeur de la composante verte"
    plt.plot(abcisse,p)#tracé du graphique
    plt.plot(abcisse,np.average(p)*np.ones(nb_echantillons))
    plt.title("Moyenne de la valeur de la composante verte pour chaque image")
    plt.xlabel(x_label)
    plt.ylabel(y_label)
    plt.show()
    ecart_t=np.sqrt(np.average((p-np.average(p))**2))
    print("Ecart-type =",ecart_t)
    return()

This snippet took 0.01 seconds to highlight.

Back to the Entry List or Home.

Delete this entry (admin only).