Sommaire des sites JMP 4 | La proto Informatique |
Tour du Monde de Renaud |
Le Yunnan (Chine) |
La Birmanie | Le Spiti | L'Arménie | Le Gujarat |
---|
Fichier simulation D:\Dropbox\Doc\Microscopie\RelaisOptique\Projectif.xls
Couleurs:
- Orange: Courbe théorique
- vert: Courbe approximative souvent utilisée. Notera le passage par le point singulier: x =f/fc =50% y =40%
- Bleue: Erreur en utilisant la courbe approximative (verte)
Limite de fréquence
Grandissement | NA | lp/mm | Tache |
2.5x | 0.07 | 254.4 | |
4x | 0.10 | 363.6 | |
10x | 0.25 | 909 | 1.1 µm |
10x | 0.3 | 1090 | 0.92 µm |
20x | 0.45 | 1636 | 0.61 µm |
40x | 0.65 | 2363 |
Dans le cas présent: obj 10x 0.25
la fréquence de coupure=fc=910 lp/mm. Le point singulier sera x=455 lp/mm et MTF=0.4=40%
0- Photo prise avec le tel S6 de Samsung
S6 Basic Specifications
Sensor size: 1/2.6 inch (5.5mm x
4.1mm)
Native ISO: 100 - 800
Image Resolution: 5312 x 2988 (15.9 MP, 16:9)
Pixel Pitch: 1.12 microns (approx)
MS plan 10x 0.25
(si capteur sans relais)
résolution objet= 1,1 µm =Lambda/2*NA
Tache capteur= 11 µm =G * Lambda
/(2*NA)
Pixel = 5,5
µm
1- retourner la photo jusqu'à avoir le noir du coté gauche
2- Zoomer à 100 %
3- Sélectionner un rectangle horizontal
4- Run MTF
L'échelle Spatiale frequency est x2, pour un capteur /2 (et c'est logique!) 100mm -> 55mm de taille capteur
Le capteur du S6 ne faisant que 5.5 mm, il faut x10 l'échelle des fréquence spatiale. On a donc ici du 300-400 lp/mm
fig. Exemple de transition reconstituée
test_MTF_01.txt Classeur1.xlsx
On peut utiliser Slant Edge en microscopie. Cependant le logiciel fournit une échelle Spatial Frequency illisible. (les nombres se chevauchent)
On va donc utiliser un capteur 10x plus grand, et mentalement x10 la fréquence indiquée.
Attention il s'agit de manip préliminaires (le nb de pixel H est faux, il devrait être de 5312
...
Est-ce bien valable d'utiliser les dimensions du capteur de téléphone?
Car on n'a pas projection direte sur le capteur! Il y a plusieurs relais optiques: oculaire x10, objectif du téléphone, ...
On cherche la FTM du coté objet. Ce sera pour vérifier que l'objectif est de précision et a bien une accuité de 1.1 µm.
1,1 µm =Lambda/2*NA avec Lambda=0.55µm NA=0.25 G=10x
Il faut retranscrire les données du capteur au niveau de l'objet, car on cherche le nombre de paire de ligne au niveau de l'objet (de la lame ou de l'échantillon)
Dans le cas du téléphone S6, on a le cercle qui tangente
Image Resolution: 5312 x 2988 (15.9 MP, 16:9)
et après correction manuelle de l'image (26.5 -> 2.65, rajoût de 0 aux chiffres 10, 20, ... -> 100, 200, ...)
(Les chiffres verts ne sont pas corrigés)
..
L'importance des mesures et évaluations.
Une erreur de 10 % sur la mesure du diamètre introduit une errer de 10 % dans la fréquence de coupure de la MTF!
Exemple, j'ai pris ci-dessus l'hypothèse d'avoir un champ de 2.65mm. En réalité je n'ai que 2.0 mm.
Objectif MSplan 10x Olympus,
lumière LED blanche, Champ 2 mm et 3263 px (montage BHS avec équipement
EPI)
(Les chiffres verts ne sont pas corrigés. LP corrigés. 20200303_185047.jpg)
Attention: Sur le S6, si on utilise la loupe pour afiner la mise au point, il faut penser à revenir à la fonction x1 pour voir le cercle entier. sinon cela ne fonctionne pas.
.
Ces tests sont faits sur un BHS equippé epi/fluo en DIC... pas l'idéal pour débuter des manips!
Ce n'est pas un système simple. D'autres parts on utilise un téléphone pour la capture d'image (donc oculaire +zoom du téléphone. Il y a probablement de l'over sampling (mieux que 2 px/dot) ce qui est une bonne chose.
Manips à refaire: Capteur directe (au foyer) Monter un reflex au foyer, sur le BHS diascopie (Splan) sans DIC...
fig. Essai 1 (Les chiffres verts ne sont pas corrigés. LP corrigés) Max théorique 1090 lp/mm
fig. Rien n'est corrigé: Multiplier par 10 les lp/mm; Sensor=2.0mm (verts non corrigés)..
Cela reste similaire aux tests avec MSplan. Une déformation apparait dans les basses fréquences . Il faudrait déduire les MTFs des oculaires, du telephone, du capteur, ... Voir mes autres recherches sur la MTF, et simulation sous Matlab.
Impact de l'éclairage? Type de condensateur...
Penser à x10 les lp/mm, et sensor=1 mm Théorique 1636 lp/mm
Il faut utiliser le zoom de SlantEdge pour bien détecter la zone la plus nette de l'image.
Attention au codage jpg. Attention à la taille des pixels. Y-a-t-il anti-flou, pré-accentuation dans le capteur téléphone?
..
L'idée est de voir si en modifiant la taille de l'image, on peut améliorer les mesures (et aussi apporter un zoom sur la courbe) On essayera de diviser par 2 et par 3 la taille de l'im0ge initiale. D'où les suffixes utilisés 3264=org 1632=1/2 et 1088=1/3
Les cellules du capteurs introduisent une modulation FTM en sin x /x (en absolu)
Il faut retrancher cette mesure pour obtenir la qualité de l'objectif microscope.
Nous allons devoir récuperer les valeurs de la courbe pour effectuer des calculs
Ce logiciel libre va nous permettre de reconstituer les données correspondantes à la courbe offerte par SlantEdge
Voir https://github.com/markummitchell/engauge-digitizer/releases/tag/v12.1
digit-exe-windows10-64-bit-installer-12.1.msi
Ce logiciel vous demandera de pointer 3 points caractéristiques de la courbe:
Points | x | y |
Origine | 0 | 0 |
axe x | 50 | 0 |
axe y | 0 | 1 |
Mais il va être perturbé par la présence des inscriptions vertes, qu'on va pouvoir éliminer avec Irfanview
On utilise Irfanview pour éliminer les inscriptions vertes
Mais pour que cela soit efficace il ne faut pas que l'original soit en jpg, il faudra penser à enregistrer les courbes en png ou bmp
Essai_01.gif
IrfanView > zoom 500% puis
IrfanView > Menu image > Replace color > (éliminer tous les points indésirables) > save > *.gif
Image nettoyée des inscriptions vertes
But: Le but est d'obtenir la liste de toutes les coordonnées définissant cette courbe rouge
1- Définir les 3 points
Engauge 12.1 > Fichier Importer > Essai_01b.gif > Placer l'origine > placer extrémité axe x > axe y
pour l'origine: x=0 et
y=0
puis x=0
y=1 et x=60 y=0
2- Définir la couleur de la courbe: engauge: Menu Configuration > Filtrage couleur > Teinte: sélectionné, régler le filtre: rouge
3- Sélectionner l'icône tracé vert [outil de remplissage par segment] et cliquer sur la courbe. -> passage en vert
On obtient:
4- Exporter les données: Engauge > Fichier > Exporter > Essai_01b.csv qui sera utilisable par Excel
x,Essai_01b
"0,0905","1,0026"
"0,724","0,94007"
"1,267","0,87755"
"1,991","0,81502"
"2,8054","0,75509"
"3,7104","0,69515"
"4,6154","0,63522"
"5,3394","0,57268"
"6,0633","0,51276"
"6,6968","0,45023"
"7,2398","0,3851"
"7,8733","0,32257"
"8,5068","0,26005"
"9,0498","0,19752"
"9,8643","0,13759"
"10,7692","0,07766"
"11,8552","0,02032"
"13,7557","0,03065"
"15,9276","0,04098"
"18,0995","0,03046"
"20,181","0,01475"
"22,4434","0,01986"
"24,6154","0,02758"
"26,7873","0,02488"
"28,9593","0,01958"
"31,1312","0,01427"
"33,3032","0,01939"
"35,4751","0,01148"
"37,6471","0,00618"
"39,819","0,00088"
"41,991","0,00859"
"44,1629","0,00329"
"46,3348","0,0032"
"48,5068","0,0031"
"50,7692","0,0004"
"52,9412","0,00551"
"55,1131","0,00021"
"57,2851","0,00272"
"59,3665","0,01305"
"61,5385","0,00514"
"63,7104","0,00765"
..
- Retirer la face avant, (ongle, couteau) puis
- faire sauter la bague autour de l'optique (élastiques et
casse-noix)
- retirer l'optique avec le casse-noix/pince
S'inspirer de la vidéo D:\Dropbox\Doc\Camera\Yi_4k\Yi 4K Action Camera Lens Replacement and Focus Ring_(video-avc1_audio-mp4a)_1280x720_1682kbps.mp4
Cela fonctionne avec cette caméra
Technical Specifications:
PC Interface USB 2.0,support
Sensor 1/2.5 inch, Enhanced COLOR
CMOS , 8 M Pixels
Maximum Resolution 3264*2448 (Hardware)
Frame Rate : 1fps at 3264*2448, 30fps at 640*480
Capture Fram : Support high speed preview and static capture
Video Mode : 3264*2448, 1600*1200,
1280*768, 640*480
Dynamic Range : 75dB
Sensitivity : 1.3V/lux-sec 550nm
Infos: http://pichotjm.free.fr/Doc/Microscopie/Camera_ScopeTek/ScopeTek.php Voir stuser_guide.pdf
- Démonter la partie supérieure du tube trino (3 vis Hexa)
- Mettre un adaptateur M42 à vis
- fixer la caméra (pistolet à colle)
- Remettre la tête bino
- Régler à l'oculaire pour voir la transition parfaitement nette (et ne plus jamais toucher! Penser à ne pas déplacer la platine x, y)
- Retirer la tête bino, et placer la caméra.
- Régler uniquement au niveau de la caméra (grace à une/la bague M42 variable) L'image doit apparaitre nette sur le petit écran: dur !
fig. DCM_01-bmp_3264.png DCM800-8MPx Splan 10x 0.30 160mm
fig. Idem ci-dessus mais avec down resampling 1632 (par IrfanView). donc nouveaux réglages 58 1632
On peut remarquer que c'est la seule méthode (?) pour élargir la courbe. On arrive ) 1350 lp/mm La courbe semble plus régulière.
fig. Idem ci-dessus mais avec down resampling 1632 (par IrfanView). donc nouveaux réglages 58 1088
(ne pas oublier que l'échelle Spatial Freq doit être x100, et que sensor size /100 =0.58 mm
https://pdf-convertisseur.fr/download/?token=0fa896455a1387b7fa8d93a18a4cff5b&delay=30&loop=5
fig. Séquence montrant différents résultats en fonction de la zone analysée
Avec PSP x6, faire:
Menu PSP> image > traitement arithmétique > .
Et cumuler successivement les images du lot (long à faire!).
Fig. Cumuls de 7 mesures: dépend des zones sélectionnées
Seule la meilleure courbe représente une mise au point (focus) parfaite.
Il faudra choisir la meilleure zone de l'image. Et cela ne sera pas facile.On pourra, par exemple rechercher la meilleure valeur pour 0.20 cycles/pixel (échelle verte)
Exemple
Avec un zoom de 200%, je vais faire des essais
le haut jusqu'au bas (cas re-sampled)
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||
Image resampled | Resampled,
58, 1632, avec feuille pour avoir une meilleure précision |
Tout cela indique que ma mire n'est pas plane et qu'il faut la refaire. Mais une mire tsès finement penchée peut aussi, par cette méthode, permettre de trouver une zone nette...
En reprenant l'image originale (non resampled)
tab. Zoom 100%, image org, estimation visuelle! |
tab. Zoom 200%, image org, estimation visuelle améliorée (feuille)! |
Comparaison des méthodes de mesures: Org ou Resampling
Fichier C:\Users\jmp76\Dropbox\Etude_sampling_SlantEdge.xlsx
La méthode re-sampling facilite la mesure, mais comme il y aura moins de phases de zooms, il y aura moins de points. Rien ne prouve que le re-sampling ne modifie pas les valeurs ???.
Les valeurs de la colonne @0.10 org sont obtenus en faisant la moyenne entre 2 valeurs consécutives
La méthode avec image originale, permet plus de zoom, donc plus d'écrans zoom, et donc plus de points. Mais la courbe est resserrée et nuit à la lecture des coordonnées.
Les valeurs des 3 colonnes @0.10 @0.20 @0.30 sont obtenues en interpolant 2 mesures consécutives.
Splan 10x 0.3 160 SaltEdge: 58 3264 128Sa zoom 200% -> 5.5 écrans -> 11 1/2 écrans
Position | @0.0 | @0.05 | @0.10 | @0.15 | @0.20 | @0.25 |
haut écran1 | 100 | 45 | 25 | 12.5 | 7.5 | 2 |
bas écran1 | 100 | 43 | 25 | 11 | 3 | 2.5 |
haut écran2 | 100 | 44 | 25.5 | 11.5 | 4.5 | 1 |
bas écran2 | 100 | 43 | 24 | 10 | 4.5 | 1 |
haut écran3 | 100 | 41 | 20 | 10 | 3 | 2 |
bas écran3 | 100 | 41 | 18 | 8 | 5 | 2.5 |
haut écran4 | 100 | 40 | 16.5 | 6.5 | 2.5 | 2 |
bas écran4 | 100 | 43 | 17 | 6 | 2.5 | 4 |
haut écran5 | 100 | 40 | 16 | 5 | 1.7 | 3 |
bas écran5 | 100 | 39 | 13.5 | 3 | 2 | 3.5 |
haut écran6 | 100 | 36 | 10 | 2.5 | 0 | 3 |
@0.xx correspond aux abscisses vertes cy/pixel
Conclusion: Sans doutes possibles la FTM à choisir est celle du haut. Mais rien ne nous permet d'affirmer qu'il n'y aurait pas une meilleur image à faire. Il faudrait trouver un tableau avec le meilleur au centre
Fichier C:\Users\jmp76\Dropbox\Etude_sampling_SlantEdge.xlsx [FTM x100]
Ces courbes démontrent que la mire n'est pas exactement plane, et que seule celle du haut de l'image correspond au meilleur focus de l'image. (serie1 en bleu)
Tout cela mérite d'être automatisé.
C'est idiot d'avoir pris l'échelle verte Cy/Px, il faut prendre les lp/mm et tout refaire.
Les conclusions restent bonnes mais il faut revoir l'histoire du re-sampling et contrôler que cela n'introduit pas d'anomalies.
Maximum Resolution 3264*2448 (Hardware)
1 Copie de l'originale
2- Re-sampling 1632 et 1088 (pas de sharpen after resample)
/2 Preuve_resampling/ess_01_1632.bmp /3 Preuve_resampling/ess_01_1088.bmp
3- SlantEdge avec 58 3264 50% 58 et 1632 50% 58 et 1088 60% (partie haute de l'image)
4- Eliminer les indications vertes IrfanView > Image > Replace Color > pointer les points verts...
5- Utilisation de Engauge Digitizer Régler la couleur de la détection de la courbe: rouge menu config > Filtrage Cr
Notez le carré rouge (en haut-milieu)
3264 | 1632 | 1088 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
Stereo.png
6- Que conclure: Courbes très semblables mais comme on n'a pas utiliser la même zône, rien ne permet d'affirmer qu'il y a dégradation ou pas!.
En reconstituant les courbes FTM avec précision (pour avoir plus de finesse dans l'analyse) [méthode interpolative complexe cf Preuve-resamplingl.xlsx] |
![]() |
[Axe y à diviser /1000] [ Axe x à multiplier x100 lp/mm] |
Cela prouve qu'il ne faut pas faire du resize. Cela modifie les FTMs. On devra se satisfaire de courbes assez étroites. (pas de Zoom sur x possible)
Dans le cas présent Olympu Splan 10x 0.30 160mm la Fc semble être vers 1300 lp/mm (l'objectif est meilleur que 0.30)
L'info ci-dessous suppose un pixel sensible sur toute sa surface. Cela est assez proche des capteurs back-lighted.
Delta est le pas/taille du pixel. La courbe passe à 0 à la fréquence spatiale de 1/delta
Si le capteur ne fait que 1.55 µm de dimension pixel, la fréquence de coupure dûe seulement à l'échantillonnage sera de 1000/1.55= 645 lp/mm [1,55 µm au capteur 1/2.3"IMX377CQT ]
Mais il faut penser à ramener cela au niveau de l'objet (ou de la lamelle), il faudra donc multiplier par le grandissement de l'objectif. Pour un Splan 10x 0.30 on aura 6452 lp/mm ce qui est excellent!
Une autre manière de voir cet objectif: limite 1.1 µm et dimension des pixels 'ramenés à l'objet =0.155µm, soit 7 pixels par tache.
La formule à utiliser sera G/delta ou Fc= [Grandissement objectif] / [Taille du pixel]
sin x/ x = 0 pour x=pi
ou sin (pi x)/(pi x) avec 0 pour x=Fc
On obtient la courbe
.
puis autre livre:
La méthode du slanted-edge Je ne veux pas décrire tous les aspects de la méthode de l'angle oblique de manière très détaillée dans ce post, mais très brièvement, les principales étapes sont : 1- Identifier et modéliser le bord de l'escalier dans la région d'intérêt (ROI) ; 2- Construire la fonction d'étalement des bords (ESF) sur-échantillonnés à espacement irrégulier à l'aide du modèle de bord ; 3- Construire un ESF à espacement régulier à partir du ESF à espacement irrégulier ; 4- Prendre la dérivée du ESF pour obtenir la fonction d'étalement de la ligne (LSF) ; 5- Calculer la FFT de la LSF pour obtenir la fonction de transfert de modulation (MTF) ; 6- Appliquer les corrections éventuelles à la MTF (correction de la dérivée, correction du noyau si nécessaire). ref http://mtfmapper.blogspot.com/ |
The slanted-edge method I do not want to describe all aspects of the slanted-edge method in great detail in this post, but very briefly, the major steps are: 1 Identify and model the step edge in the Region Of Interest (ROI); 2 Construct the irregularly-spaced oversampled Edge Spread Function (ESF) with the help of the edge model; 3 Construct a regularly-spaced ESF from the irregularly-spaced ESF; 4 Take the derivative of the ESF to obtain the Line Spread Function (LSF); 5 Compute the FFT of the LSF to obtain the Modulation Transfer Function (MTF); 6 Apply any corrections to the MTF (derivative correction, kernel correction if necessary). |
In other words, MTF is the Fourier transform of the impulse response (i.e., response to a narrow line) that is the derivative (d/dx or d/dy) of the edge response. (i.e., response to a narrow line) that is the derivative (d/dx or d/dy) of the edge response. ref à H70%
SFR Spatial Frequency Response
Algorithme à bord incliné par ImaTest refLe calcul de la MTF est dérivé de la norme ISO 12233. Certains détails sont contenus dans Le calcul d'Imatest contient un certain nombre d'améliorations, énumérées ci-dessous. Le calcul selon la méthode ISO originale est effectué lorsque la case à cocher SFR de la norme ISO dans la boîte de dialogue de saisie SFR est cochée. Voir ci-dessous pour plus d'informations :
de second ordre à chaque ligne de balayage, le bord décalé est ajouté à l'un des quatre bacs : bac 1 si 0 ≤ fp < 0,25 bac 2 si 0,25 ≤ fp < 0,5 bac 3 si 0,5 ≤ fp < 0,75 bac 4 si 0,75 ≤ fp < 1 Remarque : le bac mentionné dans l'équation précédente ne dépend pas de l'emplacement du bord détecté. Les quatre bacs sont combinés pour calculer une moyenne de 4x de bord suréchantillonné. Cela permet d'analyser les fréquences spatiales au-delà de la fréquence normale de Nyquist. La dérivée (d/dx) de la moyenne de 4x de suréchantillonnage est calculée. Une fonction de fenêtrage est appliquée pour forcer la dérivée à zéro à ses limites. La MTF est la valeur absolue de la transformée de Fourier (FFT) de la dérivée fenêtrée. Note : Les origines des calculs de SFR à bord oblique d'Imatest ont été adaptées d'un programme Matlab, sfrmat, qui a été écrit par Peter Burns pour mettre en œuvre la norme ISO 12233:2000. Le calcul de SFR d'Imatest intègre de nombreuses améliorations, notamment une meilleure détection des bords, une meilleure gestion de la distorsion des lentilles et une meilleure immunité au bruit. Le code original de Matlab est disponible ici. En comparant les résultats de sfrmat avec ceux d'Imatest, la réponse tonale est supposée être linéaire, c'est-à-dire gamma = 1 si aucun fichier OECF (courbe de réponse tonale) n'est entré dans sfrmat. Comme la valeur par défaut du gamma dans Imatest est de 0,5, ce qui est typique des appareils photo numériques, vous devez régler le gamma sur 1 pour obtenir un bon accord avec sfrmat |
Slanted-Edge AlgorithmThe MTF calculation is derived from ISO standard 12233. Some details are contained in The Imatest calculation contains a number of enhancements, listed below. The original ISO calculation is performed when the ISO standard SFR checkbox in the SFR input dialog box is checked. See below for additional information:
Note: The bin mentioned in the previous equation does not depend on the detected edge location.
Note: Origins of Imatest slanted-edge SFR calculations were adapted from a Matlab program, sfrmat, which was written by Peter Burns to implement the ISO 12233:2000 standard. Imatest’s SFR calculation incorporates numerous improvements, including improved edge detection, better handling of lens distortion, and better noise immunity. The original Matlab code is available here. In comparing sfrmat results with Imatest, tonal response is assumed to be linear; i.e., gamma = 1 if no OECF (tonal response curve) file is entered into sfrmat. Since the default value of gamma in Imatest is 0.5, which is typical of digital cameras, you must set gamma to 1 to obtain good agreement with sfrmat |
initialisation:
Aller sous prompt Anaconda:
Python
import numpy as np
from scipy.fft import rfft, irfft
Chargement de données depuis *.txt:
with open('D:\CloudStation\FTM_SlantEdge\Python\data.txt', 'r') as data:
string_data = data.read()
list_data = string_data.split(',')
list_data.pop()
Sauvegarde npy
np.save('D:\CloudStation\FTM_SlantEdge\Python\data.npy', data)
Chargement de données depuis *.npy:
data = np.load('D:\CloudStation\FTM_SlantEdge\Python\data.npy')
len(data)
data=data[0:128] #pour ajuster à 128 données
len(data)
Vérif des données
len(data) #Nb données=longueur matrice. On doit en avoir 128
data
#On doit en avoir 128 -> 129 serait idéal
data=data[0:127] #on ajuste à 128 données -> à 129
data.max() #donne la valeur max
data.min() #donne la valeur min
pop(data)
Calcul de la dérivée
.
for i in range(128): #127 et pas 128! pcq len(data)=127
a=data[i+1]-data[i]
dif[i]=a
dif[128]=0 #pb
dif #pour vérif
len(dif) #pour vérifier/connaitre la longueur. Il faut avoir 128 pour la suite rfft
e[1:]=dif #pour ajuster à 128 données (la 1ère valeur sera nulle
len(e)
e
.
.
>>> x = np.linspace(0, 10, 128) #définir l'axe des x. de 0 à 10 en 128 steps
.
.
>>> import matplotlib.pyplot as plt
>>> f=rfft(z)
>>> plt.plot(f)
>>> plt.grid()
>>> plt.legend(['FFT'])
>>> plt.show() #comment
.
plt.plot(x, data)
.
.
from scipy.fft import fft, ifft
z=dct(data, norm='ortho')
y = fft(data)
.
Lancer Jupyter: MenuWin10 > Programmes > Anaconda3 > Anaconda prompt
d:
cd D:\CloudStation\FTM_SlantEdge\Python\Jupyter
jupyter notebook
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.