• Aucun résultat trouvé

Chapitre 3 Techniques de miniaturisation

5.2 Résultats virtuels

5.2.4 Bruit

Les images utilisées pour cette étude furent générées via un logiciel de tracé de rayons. La conséquence directe est le besoin de balancer le temps nécessaire à générer une image et le niveau de bruit présent dans celle-ci. Une image moins bruitée donne, comme on peut s’y attendre, une image de meilleure qualité après la reconstruction. Le bruit présent dans l’image n’est pas un bruit gaussien étant donné que les régions ne recevant aucun rayon ne comportent pas de bruit. En effet, le bruit émerge du fait que l’image est créée rayon après rayon, tous envoyés de façon aléatoire à travers la pupille. Cela a pour conséquence une illumination discrète et non-uniforme. Pour une quantité de rayon tracé suffisamment grande, cet effet diminue. Pour comprendre l’effet du bruit présent dans l’image sur le processus de reconstruction, des images comportant différents niveau de bruit furent reconstruites à partir du même système optique. Les régions sombres furent mises de côté pour cette analyse

83 car elles ne présentent aucun bruit et ne sont pas représentatives d’une image bruitée acquise expérimentalement dans des conditions de faible luminosité par exemple. L’algorithme utilisé pour déterminer le niveau de bruit a été introduit par Immerkaer100. La métrique utilisé dans cet algorithme est un estimé direct de la

variance σ du bruit.

Les analyses ont montré que même si le bruit a un impact négatif sur la qualité d’image, la technique de correction des aberrations ne l’amplifie pas, tel que présenté à la Figure 5.9. Au contraire, l’image reconstruite tend à contenir moins de bruit que l’image originale. La raison principale est que la perte de résolution spatiale brouille les détails de l’ordre du pixel, y compris le bruit. Il était attendu que la technique de reconstruction n’amplifie pas le bruit étant donnée qu’elle n’est pas récursive. Cela la porte à croire que d’autres sortent de bruit auraient un comportement similaire.

Figure 5.9 - Comparaison de la variance du bruit avant et après la reconstruction

Chaque point représente une image générée avec un nombre différent de rayons issu de chaque pixel. Les images générées avec plus de rayons comportent moins de bruit. On peut voir que pour les images comportant plus de bruit à l’origine, la quantité de bruit finale est grandement réduite. Cependant, le niveau de bruit tend à rester constant pour des niveaux de bruit initiaux plus faible.

84

5.2.5 Échantillonnage

Un autre aspect qui fut à l’étude est l’impact de l’échantillonnage sur la qualité de reconstruction de l’image. Dans le cas présent, un échantillonnage de 11x11 champs de vue fut utilisé. En ce qui a trait à l’échantillonnage de la pupille d’entré du système, une grille de 11x11 points fut aussi utilisée. Comme on peut le voir à la Figure 5.10, une augmentation du nombre de rayon lancé pour chaque champ de vue permet d’améliorer légèrement la qualité d’image finale. Cependant, augmenter le nombre de champs de vue différent dans ce cas-ci n’apporte aucun bénéfice. Ceci est principalement due au fait qu’uniquement de l’astigmatisme est présent, menant à des variations faible sur l’erreur des rayons à travers le champ de vue.

Figure 5.10 - Qualité d’image en fonction de l’échantillonnage

Les paramètres de cette simulation sont les même que ceux présentés à la Figure 5.3. Différentes grilles d’échantillonnage furent utilisées pour permettre de comparer leur impact sur la qualité de l’image finale. On peut voir qu’une augmentation de l’échantillonnage dans la pupille améliore la qualité finale, mais que l’effet au niveau du champ de vue est nul. La métrique utilisée pour cette analyse est la MTF à 50% en cycles/mm et la cible utilisée est une transition abrupte oblique (slanted edge).

85

5.3 Résultats expérimentaux

L’ensemble des résultats obtenus jusqu’ici sont le résultat de simulations dans Zemax. Cela soulève bien sûr la question de comment performerait l’algorithme de reconstruction dans un cadre expérimental. Pour répondre à cette question, un système optique minimaliste a été conçu et testé en laboratoire. Les photos prises furent ensuite reconstruite en utilisant l’algorithme présenté dans ce chapitre.

Le système fut conçu à l’aide de Zemax et se voulait simple à réaliser. Pour cette raison, celui-ci utilise le moins d’éléments optiques possible et se limite à ce que l’on peut retrouver dans des catalogues d’éléments déjà fabriqués. Le schéma du système optique est présenté à la Figure 5.11 et les informations détaillées sont présentées dans le Tableau 9.

Figure 5.11 – Schéma Optique du montage expérimental

Tableau 9 – Prescription pour le design expérimental

Surface Rayon (mm) Épaisseur (mm) Matériau

L1 - avant STOP 12.5 1.8 BK7 L1 - arrière ∞ 40 - Microlentilles 0.708 0.9 BK7 Microlentilles ∞ 0.476 - Verre protecteur ∞ 0.5 BK7 Verre protecteur ∞ 0.125 - Image ∞ - -

86

Le système optique à un champ de vue total de 5.5°. Le premier élément est une lentille plano-convexe devant laquelle vient se placer le stop. La matrice de microlentilles, quant à elle, est composée de microlentilles espacées de 110μm. Les pièces nécessaires au maintien des lentilles furent conçues dans le logiciel FreeCAD, puis imprimées grâce à une imprimante 3D. La Figure 5.12 présente le montage expérimental.

Figure 5.12 – Caméra prototype

On peut voir ici la camera prototype sous différents angles. Celle-ci vient se visser directement sur le senseur. L’iris est directement accessible pour des ajustements au niveau de sa taille.

Bien que le chapitre présent discute principalement de la correction d’aberration via une matrice de microlentilles, le système ici présenté ne comporte pas d’aberration assez dominante pour que cet aspect soit à l’étude. L’objectif est uniquement de voir comment performe l’algorithme de reconstruction dans un cas réel, comportant du bruit et sur un système dont les paramètres peuvent s’éloigner de la valeur nominale. Les images obtenues par le système optique diffèrent des simulations sur 3 points principaux.

Premièrement, pour un fonctionnement optimal, la matrice de microlentilles doit se situer à une longueur focale de microlentilles du senseur. Cependant, étant donné la longueur focale extrêmement courte des microlentilles, le positionnement de celle-ci devient rapidement critique. Il s’avère qu’une erreur

87 de quelques dizaines de microns cause rapidement une perte d’information appréciable sur l’image. Dans le cas du montage actuel, cette distance est ajustée à l’aide de cales, ce qui ne permet malheureusement pas d’obtenir le meilleur point de focus. Un léger tilt de la matrice de microlentille pourrait aussi être responsable d’une perte d’information supplémentaire.

Deuxièmement, une portion importante de la lumière atteint le senseur entre les images élémentaires. Typiquement, dans un système idéal, ces régions ne recevraient aucun rayon et seraient complètement noires. Dans le système ici présenté, la luminosité de ces régions peut atteindre 70% de celle des images élémentaires capturant uniquement un espace blanc. Cette lumière, probablement issues de diffusion à travers les espaces entre les microlentilles contamine fort probablement les images élémentaires aussi.

Troisièmement, un certain vignettage est présent dans le système. Ce problème aurait pu être évité en plaçant un diaphragme de champ au plan image intermédiaire de notre système optique. Une certaine correction numérique est tout de même possible ici et a été effectuée.

Ces trois facteurs, une fois combinés, contribuent à diminuer la qualité d’image obtenue. Un exemple de reconstruction pour une cible en damier est présenté à la Figure 5.13 et à la Figure 5.14. Dans le premier cas, il s’agit d’une simulation. Dans le deuxième, il s’agit d’une image prise en laboratoire. Dans l’ensemble des cas présentés dans ce chapitre, la grille d’échantillonnage pour l’objet et pour la pupille est de 41x41.

88

Figure 5.13 – Reconstruction d’une cible en damier à partir de simulation

En A), on peut voir l’image d’origine utilisée pour la simulation. En B), on peut voir l’image telle que capturée par le senseur simlué. Finalement, en C), l’image reconstruite est présentée.

Figure 5.14 – Reconstruction d’une cible en damier à partir d’une image expérimentale

En A), on peut voir une image de la cible utilisée pour la capture d’image. En B), l’image obtenue à l’aide du système optique décrit précédemment. En C), l’image reconstruite.

Comme on peut le voir ci-dessus, il y a une perte notable en résolution entre l’image reconstruite à partir de simulation et celle reconstruite à partir d’une capture en laboratoire. Cependant, la reconstruction est tout de même réussite. Une comparaison de la qualité de reconstruction est présentée à la Figure 5.15. Un certain traitement supplémentaire a été effectué dans le cas de l’image expérimentale. Tout d’abord, la luminosité a artificiellement été augmentée sur

89 les bords pour compenser la différence d’illumination entre le centre et les bords. De plus, la plage dynamique de l’image a été maximisée avant la reconstruction en retirant le plancher de bruit et en normalisant la luminosité de l’image par rapport à sa valeur la plus élevé.

Figure 5.15 – Résolution obtenue sur l’image finale

On peut voir ici que la qualité de la MTF est réduite dans le cas de la reconstruction à partir d’une image prise en laboratoire. Prenant la MTF@50% comme valeur de référence, on note une chute de 50%. Cette mesure a été effectuée à l’aide d’une transition abrupte oblique (slanted edge). La principale cause de différence serait causé par une imprécision au niveau du positionnement des éléments.

Tout comme dans le cas des simulations, il est possible d’effectuer la reconstruction pour des images en couleur. Un exemple est présenté à la Figure 5.16.

90

Figure 5.16 – Reconstruction d’une scène en couleur à partir d’une image expérimentale

En A), on peut voir une image de la cible utilisée pour la capture d’image. En B), l’image obtenue à l’aide du système optique décrit précédemment. En C), l’image reconstruite. La qualité est semblable à la reconstruction monochromatique. On peut apercevoir certains artéfacts sur les côté de l’image. LA cause est incertaine, mais ceux-ci sont potentiellement issus d’une mauvaise correspondance entre le modèle théorique et la modèle expérimentale.

Différente photos ont été prises dans des conditions d’illumination différentes pour évaluer si une faible illumination pouvait avoir une influence notable sur la qualité de la reconstruction. Les résultats sont présentés à la Figure 5.17. Bien que le bruit initial de l’image se transfère dans l’image finale, aucune perte notable de résolution ne fut mesurée pour une transition oblique abrupte.

91

Figure 5.17 – MTF d’images reconstruites pour différents temps d’exposition

Des temps d’exposition courts génèrent une certaine quantité de bruit dans l’image plénoptique d’origine, qui est à son tour transféré dans l’image finale reconstruite. Cependant, ce bruit n’est pas un facteur dominant responsable de la dégradation de la qualité d’image.

92

Chapitre 6

Conclusion

Le but de ce projet de doctorat est d’adapter et de développer des techniques de miniaturisation applicables à des systèmes optiques grand angle.

À travers l’étude des diverses techniques de miniaturisation, la lentille repliée joint à l’imagerie à fovéa et la correction d’aberration via l’imagerie plénoptique ont été retenus comme candidats permettant la miniaturisation de caméra grand angle.

La miniaturisation des systèmes optiques, notamment des systèmes grand angle, est un sujet d’actualité qui revêt une grande importance. Tel que mentionné au Chapitre 1, la réduction en taille des composantes optiques permet l’intégration de caméras dans une plus vaste gamme d’applications. Une amélioration constante des techniques de production ont permis jusqu’à présent de grandes avancées dans le domaine de la miniaturisation, mais aujourd’hui d’autres techniques doivent être développées dans le but de miniaturiser d’avantage.

Dans le but de favoriser une bonne compréhension de la part du lecteur, l’ensemble des notions de bases relatives aux domaines d’études abordés dans cette thèse sont présentées au Chapitre 2. Les concepts fondamentaux relatifs

93 au deux sujet principaux, soit l’imagerie plénoptique et l’imagerie à fovéa, y sont détaillés.

Bien que cette thèse se soit concentrée sur deux aspects en particulier, le domaine de la miniaturisation de système optique reste tout de même très vaste. Le Chapitre 3 dresse un portrait plus global des différentes avenues empruntées dans la littérature permettant la miniaturisation de système optique. Une courte description de chacune des techniques, avec leurs forces et faiblesses, est présentée. Ce survol met en lumière les raisons pour lesquelles certaines techniques furent écartées du cadre de projet de recherche.

L’ensemble du travail effectué sur l’imagerie à fovéa est présenté au Chapitre 4. Un design original d’endoscope miniature grand angle y est présenté, de même que l’ensemble du processus de conception et de tolérancement. L’utilisation d’un repli dans le système permet de réduire la taille effective du système, permettant une intégration plus aisée dans un système complet. Deux versions de l’endoscope présentant des variations différentes de leur lfl sont analysées. De cette façon, il est possible de faire une comparaison sur les performances finales de systèmes optiques pour différents niveaux d’agressivité et de contrôle de la lfl. Finalement, il est montré qu’un contrôle actif de la distorsion au moment du design peut permettre de maintenir les performances d’un système optique dans certaines régions clés du champ de vue tout en réduisant le nombre d’éléments qui le compose.

Le Chapitre 5, quant à lui, contient les travaux en lien avec la correction d’aberration via une matrice de microlentilles. Un algorithme de reprojection économe permettant de reconstruire une image plénoptique aberrée est présenté. Il est montré, à travers des simulations, qu’il est possible de corriger des aberrations présentes dans un système optique. Les cas monochromatiques, polychromatiques et grand angle furent abordés et corrigés avec succès. Il a aussi été démontré que l’algorithme de correction n’amplifiait pas le bruit présent dans les images d’origines. Finalement, un prototype simple de caméra plénoptique a été conçu et testé en laboratoire. Malgré une chute

94

notable de la qualité d’image obtenue par rapport aux simulations, il est définitivement possible de reconstruire une image expérimentale au même titre qu’une image simulée.

Bien que la technique de correction d’aberrations via une matrice de microlentilles soit prometteuse, la résolution finale obtenue dans les images reconstruites ne permet pas d’envisager l’utilisation directe de cette technique dans des systèmes d’imagerie standard actuels. Plusieurs travaux pourraient encore être effectués en lien avec ce projet. Tout d’abord, il serait intéressant d’investiguer la possibilité d’adapter et d’appliquer l’algorithme de correction à des systèmes plénoptiques commerciaux. Une autre avenue intéressante serait l’utilisation de ressource computationnelle additionnelle pour la caractérisation du système optique et sa reconstruction.

95

Annexe A

#--- #--- # ABERRATIONS_MAPPING.ZPL #--- #--- #24 mai 2017 #Xavier Dallaire

#Donne une coordonnée (x,y,px,py) pour chaque rayon à travers #le champ de vue pour un système optique donné.

#--- # INITIALISATION

#--- basepath$ = basepath\"

REWIND

OUTPUT SCREEN, APPEND FORMAT 5.8

PRINT "The macro is running"

folderpath$ = basepath$ + "TEMP ZEMAX FILE" MAKEFOLDER folderpath$

basepath$ = folderpath$ + "\"

Full_map_stats$ = basepath$ + "Full_map_stats.txt" DELETEFILE Full_map_stats$ #--- # MAPPING #--- field_sampling = 11 pupil_sampling = 11 last_surface = NSUR() Semi_Diameter = SDIA(last_surface) counter = 0 errorcount = 0 FOR j = 0, field_sampling-1, 1 OUTPUT SCREEN, APPEND REWIND

FORMAT 4.0

PRINT $STR(j+1)+" /"+$STR(field_sampling) FORMAT 5.8

96

FOR k = 0, field_sampling-1, 1 FORMAT .0

counter = counter + 1

Full_map$ = basepath$ + "Full_map" + $STR(counter) + ".txt" DELETEFILE Full_map$

OUTPUT Full_map$, APPEND PRINT "x", " ", "y" FORMAT 5.8

FOR m = 0, pupil_sampling-1, 1

FOR p = 0, pupil_sampling-1, 1

RAYTRACE 2*j/(field_sampling-1)-1, 1-

2*k/(field_sampling-1), 1-2*m/(pupil_sampling-1), 2*p/(pupil_sampling-1)-1 error=RAYE()

PRINT RAYX(last_surface), "",RAYY(last_surface)*-1 IF error!=0 errorcount = errorcount + 1 ENDIF NEXT NEXT NEXT NEXT

OUTPUT Full_map_stats$, APPEND PRINT "DATA"

PRINT field_sampling PRINT pupil_sampling PRINT Semi_Diameter PRINT errorcount OUTPUT SCREEN, APPEND REWIND

FORMAT 4.0

PRINT "Error Count" PRINT errorcount

#############################################################################

% Main_Lab

% Appelle l'ensemble des fonctions nécessaires à la reconstruction

% d'une image acquise expérimentalement

% Xavier Dallaire % 23 mai 2017 clear; clc; tic; basepath = basepath';

97

suffix = '';

image_path = strcat(basepath, 'imagename.bmp'); %% Correction de l'image obtenue expérimentalement nPixels = 53;

nLens = 37;

total_pixels = nPixels*nLens;

[img_scene_fixed] = Image_Fix_Lab(image_path, total_pixels); figure;

imshow(img_scene_fixed); warning off %#ok<WNOFF>

imwrite(img_scene_fixed,[basepath, suffix, 'img_scene_fixed.jpg']); %img_scene_fixed = imread([basepath, suffix, 'img_scene_fixed.jpg']); %% Découpage de l'image en LF4D

[lf4d] = Image_Preparation_Lab(img_scene_fixed, nPixels, nLens); %save(strcat(basepath, 'templf4d_imageX' , suffix,

'.mat'),'lf4d_imageX');

%load(strcat(basepath, 'templf4d_imageX' , suffix, '.mat')); %% Inspection visuelle du découpage

maxnum = 25; for j = 1:maxnum subplot(sqrt(maxnum),sqrt(maxnum),j); imshow(lf4d(:,:,j,j)); end

%% Importation des données Zemax

file_root = 'C:\Users\Xavier\Desktop\MicroLab\TEMP ZEMAX FILE'; [DATA] = Import_Data_Lab(file_root);

save(strcat(basepath, 'tempDATA' , suffix, '.mat'),'DATA'); % load(strcat(basepath, 'tempDATA' , suffix, '.mat')); %% Caractérisation du système

[LensMap,DATAmod] = LensMap_Creation_Lab(DATA, lf4d);

%save(strcat(basepath, 'tempLensMap' , suffix, '.mat'),'LensMap'); %load(strcat(basepath, 'tempLensMap' , suffix, '.mat'));

%% Interpolation et reconstruction d'image nb_points_champs = ;

nb_points_pupil = ;

[Corrected_Image, LensMapCustom, temp] =

Digital_Correction_Lab(LensMap, lf4d, nb_points_champs, nb_points_pupil);

imwrite(Corrected_Image,[basepath,'image_rebuild_simu' , suffix,

'.jpg']);

98

imshow(Corrected_Image); clc;

disp('Process completed');

disp(['Elapsed time = ', num2str(toc/60), ' minutes']);

#####################################################################

function [img_scene_fixed] = Image_Fix_Lab(image_path, total_pixels)

% Xavier Dallaire % 23 mai 2017

% Prépare l'image issues du laboratoire en effectuant une rotation et % un recadrage approprié

warning off %#ok<*WNOFF>

image = rgb2gray(imread(image_path)); clc;

disp('Click on 2 points on an horizontal line (left then right)'); figure;

imshow(image);

[line_x, line_y] = getpts; close;

rotation_angle = atan((line_y(2)-line_y(1))/(line_x(2)- line_x(1)))*360/(2*3.1416);

image = imrotate(image, rotation_angle); clc;

disp('Click on the center of the array'); figure;

imshow(image);

[centrex_img, centrey_img] = getpts; close; pixel_limits = (total_pixels-1)/2; img_scene_fixed = image(centrey_img- pixel_limits:centrey_img+pixel_limits, centrex_img- pixel_limits:centrex_img+pixel_limits); end #####################################################################

function [lf4d] = Image_Preparation_Lab(img_scene_fixed, nPixels,

nLens)

% Xavier Dallaire % 23 mai 2017

% Découpe l'image en un vecteur 4D représentant le lightfield % en une grille uniforme. L'image en entré doit être alignée et % monchromatique.

99 img_scene_fixed = single(img_scene_fixed); img_scene_fixed = img_scene_fixed/max(max(img_scene_fixed)); lf4d = zeros(nPixels,nPixels,nLens,nLens); for x = 1:nLens; for y = 1:nLens; lf4d(:,:,x,y) = img_scene_fixed(((x-1)*nPixels)+1:x*nPixels,((y- 1)*nPixels)+1:y*nPixels); end end end #####################################################################

function [DATA] = Import_Data_Lab(filename_root)

% Xavier Dallaire % 23 mai 2017

% Importe les données de tracé de rayon a la sortie de la macro ZPL % Aberrations_Mapping.ZPL dans Matlab. Majoritairement généré

% par Matlab.

%% Initialize variables delimiter = '\t';

startRow = 2; endRow = inf;

% Read columns of data as strings:

% For more information, see the TEXTSCAN documentation. formatSpec = '%s%s';

%% Ouvre le fichier data

filename = strcat(filename_root, '\Full_map_stats.txt'); fileID = fopen(filename,'r');

% Read columns of data according to format string.

% This call is based on the structure of the file used to generate this % code. If an error occurs for a different file, try regenerating the code

% from the Import Tool.

dataArray = textscan(fileID, formatSpec, endRow(1)-startRow(1)+1,

'Delimiter', delimiter, 'HeaderLines', startRow(1)-1, 'ReturnOnError',

false);

for block=2:length(startRow) frewind(fileID);

dataArrayBlock = textscan(fileID, formatSpec, endRow(block)- startRow(block)+1, 'Delimiter', delimiter, 'HeaderLines',

100 for col=1:length(dataArray) dataArray{col} = [dataArray{col};dataArrayBlock{col}]; end end

% Close the text file. fclose('all');

% Convert the contents of columns containing numeric strings to numbers.

% Replace non-numeric strings with NaN.

raw = repmat({''},length(dataArray{1}),length(dataArray)-1);

for col=1:length(dataArray)-1

raw(1:length(dataArray{col}),col) = dataArray{col};

end

numericData = NaN(size(dataArray{1},1),size(dataArray,2));

for col=[1]

% Converts strings in the input cell array to numbers. Replaced

non-numeric

% strings with NaN.

rawData = dataArray{col}; for row=1:size(rawData, 1);

% Create a regular expression to detect and remove non-numeric prefixes and % suffixes. regexstr = '(?<prefix>.*?)(?<numbers>([- ]*(\d+[\.]*)+[\,]{0,1}\d*[eEdD]{0,1}[-+]*\d*[i]{0,1})|([- ]*(\d+[\.]*)*[\,]{1,1}\d+[eEdD]{0,1}[-+]*\d*[i]{0,1}))(?<suffix>.*)'; try

result = regexp(rawData{row}, regexstr, 'names'); numbers = result.numbers;

% Detected commas in non-thousand locations. invalidThousandsSeparator = false; if any(numbers=='.'); thousandsRegExp = '^\d+?(\.\d{3})*\,{0,1}\d*$'; if isempty(regexp(thousandsRegExp, '.', 'once')); numbers = NaN; invalidThousandsSeparator = true; end end

% Convert numeric strings to numbers. if ~invalidThousandsSeparator;

%numbers = strrep(numbers, '.', ''); numbers = strrep(numbers, ',', '.'); numbers = textscan(numbers, '%f'); numericData(row, col) = numbers{1}; raw{row, col} = numbers{1};

end catch me end end end

101

R = cellfun(@(x) ~isnumeric(x) && ~islogical(x),raw); % Find non- numeric cells

raw(R) = {NaN}; % Replace non-numeric cells

% Allocate imported array to column variable names DATA.field_sampling = single(cell2mat(raw(1, 1))); DATA.pupil_sampling = single(cell2mat(raw(2, 1))); DATA.DetectorSize = single(cell2mat(raw(3, 1))); DATA.Error_Count = single(cell2mat(raw(4, 1))); vector_size = (DATA.field_sampling^2)*(DATA.pupil_sampling^2); DATA.Hx = single(zeros(vector_size,1)); DATA.Hy = single(zeros(vector_size,1)); DATA.Px = single(zeros(vector_size,1)); DATA.Py = single(zeros(vector_size,1)); DATA.x = single(zeros(vector_size,1)); DATA.y = single(zeros(vector_size,1));

%% Ouvre en boucle les fichiers de points x y

for j = 1:DATA.field_sampling^2

clc;

disp(strcat(num2str(j),'/',num2str(DATA.field_sampling^2), '

imported data files'));

filename = strcat(filename_root, '\Full_map', num2str(j), '.txt'); fileID = fopen(filename,'r');

% Read columns of data according to format string.

% This call is based on the structure of the file used to generate

this

% code. If an error occurs for a different file, try regenerating

the code

% from the Import Tool.

dataArray = textscan(fileID, formatSpec, endRow(1)-startRow(1)+1,

'Delimiter', delimiter, 'HeaderLines', startRow(1)-1, 'ReturnOnError',

false);

for block=2:length(startRow) frewind(fileID);

dataArrayBlock = textscan(fileID, formatSpec, endRow(block)- startRow(block)+1, 'Delimiter', delimiter, 'HeaderLines',

startRow(block)-1, 'ReturnOnError', false); for col=1:length(dataArray)

dataArray{col} = [dataArray{col};dataArrayBlock{col}]; end

end

% Close the text file.

Dans le document Miniaturisation de lentilles grand angle (Page 96-130)

Documents relatifs