185 lines
6.6 KiB
Python
185 lines
6.6 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
"""
|
||
|
Created on Thu Jun 28 15:30:23 2018
|
||
|
|
||
|
@author: Armando
|
||
|
"""
|
||
|
|
||
|
#import os
|
||
|
import ReadIM
|
||
|
import numpy as np
|
||
|
import matplotlib.pyplot as plt
|
||
|
#import matplotlib.animation as animation
|
||
|
#import glob
|
||
|
from matplotlib.colors import LogNorm
|
||
|
#from matplotlib.animation import FFMpegWriter
|
||
|
#from skimage.filters.rank import mean_bilateral
|
||
|
#from skimage.morphology import disk
|
||
|
#import scipy.misc
|
||
|
from skimage import exposure
|
||
|
|
||
|
#Courbe fit values - as well as the maximum and minimum values for the inverse fit function
|
||
|
global a, b, c, d
|
||
|
a = 0.316617
|
||
|
b = 1.26288
|
||
|
c = -7.70744
|
||
|
d = 0.6722
|
||
|
y_min = 0.36
|
||
|
y_max = 0.98
|
||
|
|
||
|
#Numerical to physical equivalences
|
||
|
nappe_laser = 0.250 #Thickness of laser en mm
|
||
|
dimension_pixel = 0.026244 #Equivalence mm/px
|
||
|
|
||
|
#Conversion to SI units
|
||
|
dimension_pixel_m = dimension_pixel * 10**(-3) #Equivalence mm/px
|
||
|
nappe_laser_m = nappe_laser * 10**(-3) #Thickness of laser en m
|
||
|
surface_pixel = dimension_pixel_m**2 #Surface equivalence of a pixel (m^2)
|
||
|
|
||
|
#The working directory, where all the images are stored
|
||
|
working_directory = 'D:\\python_processing\\imagesV2\\eauXG\\'
|
||
|
|
||
|
#help to accelerate script by not showing images
|
||
|
#Plotting options
|
||
|
global interpolation, vmax_value, vmin_value, colormap
|
||
|
colormap = plt.get_cmap('viridis')
|
||
|
vmin_value = 0.001 #Minimum value for the pixel value of a processed image
|
||
|
vmax_value = 0.6 #Maximum value for the pixel value of a processed image
|
||
|
interpolation = 'bicubic' #Output image interpolation (see matplotlib interpolations for more information)
|
||
|
origin = []
|
||
|
|
||
|
#Fit-inverse function
|
||
|
def inverse_tanhfit(y):
|
||
|
return (1/2*np.log((a+y-d)/(a-y+d))-c)/(b)
|
||
|
|
||
|
|
||
|
cut_image_y0 = 0 #The borders that will be cropped from the image [y0,yf,x0,xf]
|
||
|
cut_image_yf = 0 #xf and yf, are the values to be rested from the total images(hence if 0 the max values are used)
|
||
|
cut_image_x0 = 0
|
||
|
cut_image_xf = 0
|
||
|
radius = 0
|
||
|
r=[]
|
||
|
|
||
|
#The experiment and image to process (only one of each will be used since it is a test)
|
||
|
working_dir = 'C:\\Users\\Armando\\Desktop\\conf\\'
|
||
|
image_to_process = 'B00210.im7'
|
||
|
|
||
|
|
||
|
vbuff, vatts = ReadIM.extra.get_Buffer_andAttributeList(working_dir+ image_to_process)
|
||
|
v_array, vbuff = ReadIM.extra.buffer_as_array(vbuff)
|
||
|
original_array = v_array[1][cut_image_y0:len(v_array[0])-cut_image_yf,cut_image_x0:len(v_array[0][0])-cut_image_xf]
|
||
|
original_array = np.array(original_array,dtype = float)
|
||
|
modif_array = np.array(original_array,dtype = float)
|
||
|
original_array = exposure.rescale_intensity(original_array)
|
||
|
|
||
|
fig, ax = plt.subplots()
|
||
|
#
|
||
|
plt.rc('text', usetex=True)
|
||
|
plt.rc('font', family='serif')
|
||
|
plt.rcParams['figure.figsize'] = (10.0, 6.0)
|
||
|
plt.rcParams['font.size'] = 24
|
||
|
plt.rcParams['lines.linewidth'] = 2
|
||
|
plt.rcParams['lines.markersize'] = 24
|
||
|
plt.rcParams['xtick.direction'] = 'out'
|
||
|
plt.rcParams['ytick.direction'] = 'out'
|
||
|
plt.rcParams['legend.fontsize'] = 24
|
||
|
plt.rcParams['axes.titlesize'] = 24
|
||
|
plt.rcParams['axes.labelsize'] = 24
|
||
|
#
|
||
|
|
||
|
vmin = 0.05
|
||
|
vmax = 0.8
|
||
|
v =[0-17.8423, 33.59-17.8423, 44.88-6.72752, 0-6.72752]
|
||
|
im = ax.imshow(original_array, cmap=colormap, origin='upper', extent = v, norm = LogNorm(vmin , vmax))
|
||
|
plt.ylabel('Z (mm)')
|
||
|
plt.axis('scaled')
|
||
|
#ax.set_yticks([0, 44.88,10])
|
||
|
|
||
|
|
||
|
plt.xlabel('X (mm)')
|
||
|
cbar = fig.colorbar(im, ticks=[vmin, vmax])
|
||
|
cbar.ax.set_yticklabels(['Low', 'High']) # horizontal colorbar
|
||
|
plt.tight_layout()
|
||
|
plt.show()
|
||
|
|
||
|
|
||
|
#%%
|
||
|
vbuff, vatts = ReadIM.extra.get_Buffer_andAttributeList(working_dir+ image_to_process)
|
||
|
v_array, vbuff = ReadIM.extra.buffer_as_array(vbuff)
|
||
|
original_array = v_array[0][cut_image_y0:len(v_array[0])-cut_image_yf,cut_image_x0:len(v_array[0][0])-cut_image_xf]
|
||
|
original_array = np.array(original_array,dtype = float)
|
||
|
modif_array = np.array(original_array,dtype = float)
|
||
|
#original_array = exposure.rescale_intensity(original_array)
|
||
|
|
||
|
for y in range(len(modif_array)-1):
|
||
|
for x in range(len(modif_array[0])-1):
|
||
|
if modif_array[y][x] >= y_max:
|
||
|
modif_array[y][x] = 9
|
||
|
elif modif_array[y][x] <= y_min:
|
||
|
modif_array[y][x] = 9
|
||
|
else:
|
||
|
modif_array[y][x] = inverse_tanhfit(modif_array[y][x])
|
||
|
|
||
|
#The CO2 concentration is then obtained from the pH value
|
||
|
#modif_array = 207608319.9386*np.power(modif_array,-9.7399) #Concentration CO2 en g/m^3 (equal to mg/l)(from measures made by Tom LACASSAGNE)
|
||
|
modif_array = 115467070469*np.exp(-4.63*modif_array) #Concentration CO2 en g/m^3 (equal to mg/l)(theoretical values)
|
||
|
modif_array[modif_array<8e-13] = 0
|
||
|
modif_array[modif_array>1] = 0
|
||
|
|
||
|
#The values under 0.1 and over 40 (g/m^3) are considered noise and hence turned to 0
|
||
|
cut_image1 = modif_array[0:len(modif_array),0:len(modif_array[0])//2]
|
||
|
cut_image2 = np.fliplr(modif_array[0:len(modif_array),len(modif_array[0])//2:len(modif_array[0])-1])
|
||
|
|
||
|
#Then we take the mean value for both images.
|
||
|
modif_array2 = np.mean(np.array([cut_image1,cut_image2]), axis=0,dtype=np.float64)
|
||
|
|
||
|
#This section, creates the r-vector (which have the same size as cutted images)
|
||
|
if r == []:
|
||
|
for k in range(len(modif_array2[0])):
|
||
|
radius += dimension_pixel_m
|
||
|
r.append(radius)
|
||
|
|
||
|
#Multiplication of the image [C] by the {r} radius vector
|
||
|
modif_array2 = (modif_array2) @ r
|
||
|
|
||
|
#Final calculation to obtain the mass of CO2 in the image
|
||
|
mass_co2 = (surface_pixel * np.pi * 2 * modif_array2.sum())/nappe_laser_m #The mass is obtained in (g)
|
||
|
|
||
|
|
||
|
#%%This is the second section that will be used to plot the data obtained
|
||
|
modif_array2 = modif_array.copy()
|
||
|
#modif_array = exposure.rescale_intensity(modif_array)
|
||
|
|
||
|
fig, ax = plt.subplots()
|
||
|
|
||
|
#
|
||
|
plt.rc('text', usetex=True)
|
||
|
plt.rc('font', family='serif')
|
||
|
plt.rcParams['figure.figsize'] = (10.0, 6.0)
|
||
|
plt.rcParams['font.size'] = 24
|
||
|
plt.rcParams['lines.linewidth'] = 2
|
||
|
plt.rcParams['lines.markersize'] = 24
|
||
|
plt.rcParams['xtick.direction'] = 'out'
|
||
|
plt.rcParams['ytick.direction'] = 'out'
|
||
|
plt.rcParams['legend.fontsize'] = 24
|
||
|
plt.rcParams['axes.titlesize'] = 24
|
||
|
plt.rcParams['axes.labelsize'] = 24
|
||
|
#
|
||
|
|
||
|
|
||
|
v =[0-5.95617, 11.3637-5.95617, 27.976, 0]
|
||
|
im = ax.imshow(modif_array, cmap=colormap, origin='upper',
|
||
|
norm = LogNorm(vmin = 0.00001, vmax = 1), extent = v)
|
||
|
plt.ylabel('Z (mm)')
|
||
|
plt.axis('scaled')
|
||
|
#ax.set_yticks([0, 44.88,10])
|
||
|
|
||
|
|
||
|
|
||
|
plt.xlabel('X (mm)')
|
||
|
cbar = fig.colorbar(im, ticks=[0.00001, 1] )
|
||
|
|
||
|
cbar.ax.set_yticklabels(['Low', 'High']) # horizontal colorbar
|
||
|
plt.tight_layout()
|
||
|
plt.show()
|