https://www.olympus.fr/site/fr/c/camera ... g_tracker/
une petite bombe qui enregistre tres bien , et meme le son, m'a laissé sur le cul
je ne pensais pas que ce soit si net !!
il existe 2 modes "wide" , mais a ma grande surprise aucun mode "non wide"
meme si pour le mode video on peut tricher en changeant l'objectif , et utiliser l'objectif "plat" (elle est fournie avec 2 objectifs)
ça passe bien , mais pour le mode photo ....
l'effet Fisheye est bien present !
et moi j'aime pas le mode Fisheye !
alors depuis 2 jours, et parce que je me traine un rhume carabibé ("carabiné" ...mais peut pas le dire forcement ) refilé par un petit neveu .... , je suis a la recherche de logiciels permettant de "defisheyer" (action de retirer l'effet fisheyes d'une photo pour ceux qui suivent pas )
j'ai essayer plein de trucs, et bien sur ceux qui marche le mieux sont .... payant
apres deux nuit a réfléchir (oui je suis lent des fois ) , je me suis rappelé que j'etais possesseur d'une licence Purebasic
que meme j'ai fait un super editeur et que ....
alors je me suis dit , et si je codais un truc du genre
je suis allez glaner quelques infos sur ce site :
http://www.tannerhelland.com/4743/simpl ... istortion/
l'algo est simple en fait
voici ce que j'obtiens avec mon code :
image du haut = image d'origine
image du bas = image calculée par mon code
notez l'arrondi de la tour a gauche et la lignes sur le sol (a droite ) , et le bâtiment de droite due a l'effet fisheyes
je compte ajouter un mode batch pour traiter un dossier complet ....
voici le code tel qu'il est actuellement
[load] = charger une image a traiter
[curseur force] = il faut le mettre vers le centre pour commencer a voir un effet
[curseur zoom] = permet de cadrer , car forcement on modifie l'image, il y a une petite perte , on peut optimiser le cadrage avec ce curseur
[calcul] = effectue le calcul , on peut changer la position du curseur et relancer le calcul pour voir la différence
[save] = ben oui même que ça sauve le résultat
le code :
Code : Tout sélectionner
;***********************************************
;Titre :*Pure_defisher2
;Auteur : Dobro
;Date :28/09/2016
;Heure :10:13:13
;Version Purebasic : PureBasic 5.50 (Windows - x86)
;Version Purebasic : (").PureBasic 5.50 (Windows - x64)
;Version de l'editeur :EPB V2.64
; Libairies necessaire : Aucune
;***********************************************
;{- Enumerations / DataSections
;{ Windows
UseJPEGImageDecoder()
UseJPEGImageEncoder()
UsePNGImageDecoder()
UsePNGImageEncoder()
Enumeration
#Win
#file
EndEnumeration
;}
;{ Gadgets
Enumeration
#Image_0
#Image_1
#ScrollBar_Force
#ScrollBar_zoom
#Text_force
#Text_zoom
#Text_Titre
#Text_auteur
#Button_Load
#Button_Save
#Button_calcul
#progress_calcul
#image_origine
#image_origine_gadget
#image_modifie
#image_modifie_gadget
#image_modifie2
#Text_eff_x
#Text_eff_y
#ScrollBar_eff_x
#ScrollBar_eff_y
#Button_reset
EndEnumeration
;}
;{ Fonts
Enumeration
#Font_Text_Titre
EndEnumeration
;}
;{ Images
Enumeration
#Image_Image_0
#Image_Image_1
EndEnumeration
;}
Structure image_file
image_file.s
here.s
name_image.s
extens_image.s
Largeur_image.i
hauteur_image.i
pos_curs_force.i
pos_curs_zoom.d
eff_x.i
eff_y.i
EndStructure
Global image_file.image_file
Global Dim Image_or.d(1,1)
Global Dim Image_res.d(1,1)
image_file\pos_curs_zoom.d=1
Declare openwindow_win()
Define.l Event
;}
if FileSize(GetCurrentDirectory()+"Pure_defisher.ini")>1
If Openfile(#file,GetCurrentDirectory()+"Pure_defisher.ini")
image_file\here.s=ReadString(#file)
image_file\pos_curs_force=ReadInteger(#file)
curs.d=ReadFloat(#file)
image_file\eff_x.i=ReadInteger(#file)
image_file\eff_y.i=ReadInteger(#file)
Endif
Else
image_file\here.s=GetCurrentDirectory();|
Endif;]
OpenWindow_Win()
SetGadgetState(#ScrollBar_Force,image_file\pos_curs_force)
SetGadgetState(#ScrollBar_zoom,curs.d)
;{- Event loop
Repeat
Event = WaitWindowEvent(12)
Select Event
; ///////////////////
Case #PB_Event_Gadget
Select EventGadget()
Case #Image_0
Case #Image_1
Case #scrollbar_eff_x
;-effet_x
image_file\eff_x.i= GetGadgetState(#Scrollbar_eff_x)
Case #scrollbar_eff_y
;-effet_y
image_file\eff_y.i= GetGadgetState(#Scrollbar_eff_y)
Case #ScrollBar_Force
;-force
Case #ScrollBar_zoom
;-zoom
if isimage(#image_modifie)
curs.d=GetGadgetState(#scrollbar_zoom)
;image_file\pos_curs_zoom=image_file\pos_curs_zoom-curs.d
ResizeImage(#image_modifie,image_file\Largeur_image+curs.d, image_file\hauteur_image+curs.d)
GrabImage(#image_modifie,#image_modifie2,curs.d,curs.d,image_file\Largeur_image-curs.d, image_file\hauteur_image-curs.d)
CopyImage(#image_modifie2,#image_modifie_gadget)
ResizeImage(#image_modifie_gadget,GadgetWidth(#Image_0),GadgetHeight(#Image_0))
SetGadgetState(#Image_1, imageId(#image_modifie_gadget))
endif
Case #Text_force
Case #Text_Titre
Case #Text_auteur
Case #Button_reset
;-reset
SetGadgetState(#Scrollbar_eff_x,image_file\Largeur_image/2)
SetGadgetState(#ScrollBar_eff_y,image_file\hauteur_image/2)
SetGadgetState(#ScrollBar_Force,10000/2)
Case #Button_Load
;-load
image_file\image_file.s=OpenFileRequester("choisir une image",image_file\here.s,"*.jpg;*.png;*.bmp",1)
if image_file\image_file.s<>""
image_file\here.s=GetPathPart( image_file\image_file.s)
image_file\name_image.s=GetFilePart( image_file\image_file.s,#PB_FileSystem_NoExtension)
image_file\extens_image.s=GetExtensionPart( image_file\image_file.s)
If LoadImage(#image_origine, image_file\image_file.s)
image_file\Largeur_image=ImageWidth(#image_origine)
image_file\hauteur_image=ImageHeight(#image_origine)
CopyImage(#image_origine,#image_origine_gadget)
ResizeImage(#image_origine_gadget,GadgetWidth(#Image_0),GadgetHeight(#Image_0))
SetGadgetState(#Image_0, imageId(#image_origine_gadget))
SetGadgetAttribute(#progress_calcul, #PB_ProgressBar_Maximum, image_file\hauteur_image)
SetGadgetAttribute(#scrollbar_eff_x,#PB_ScrollBar_Maximum , image_file\Largeur_image)
SetGadgetAttribute(#scrollbar_eff_y,#PB_ScrollBar_Maximum , image_file\Hauteur_image)
SetGadgetState(#Scrollbar_eff_x,image_file\eff_x)
SetGadgetState(#ScrollBar_eff_y,image_file\eff_y)
;
Dim Image_or.d(image_file\Largeur_image,image_file\hauteur_image)
Dim Image_res.d(image_file\Largeur_image,image_file\hauteur_image)
; Scan
StartDrawing(ImageOutput(#image_origine))
For y=1 to image_file\hauteur_image-1
For x=1 to image_file\Largeur_image-1
Image_or(x,y)=point(x,y)
Next x
Next y
StopDrawing()
Else
MessageRequester("erreur", "pas pu charger cette image !")
Endif
Endif
Case #Button_Save
;-Save
CopyImage(#image_modifie2,#image_modifie)
FreeImage(#image_modifie2)
path_save.s=SaveFileRequester("ou sauver ?" ,image_file\here.s+image_file\name_image.s+"."+image_file\extens_image.s,"*.jpg;*.png;*.bmp",1)
select LCase(image_file\extens_image.s)
Case "jpg"
SaveImage(#image_modifie,path_save.s,#PB_ImagePlugin_JPEG,10)
case "bmp"
SaveImage(#image_modifie,path_save.s,#PB_ImagePlugin_BMP)
case "png"
SaveImage(#image_modifie,path_save.s,#PB_ImagePlugin_PNG)
EndSelect
Case #Button_calcul
;-calcul
if IsImage(#image_origine)
; defisher
halfWidth.d=image_file\Largeur_image-GetGadgetState(#scrollbar_eff_x);image_file\Largeur_image/2
halfHeight.d=GetGadgetState(#scrollbar_eff_y);image_file\hauteur_image/2
strength.d=GetGadgetState(#ScrollBar_Force)/1000
if strength.d = 0 : strength.d = 0.00001:Endif
correctionRadius.d = (pow(image_file\Largeur_image , 2) +pow(image_file\hauteur_image , 2)) / strength.d
;correctionRadius.d = sqr((image_file\Largeur_image*image_file\Largeur_image)) + ((image_file\hauteur_image*image_file\hauteur_image)) / strength.d
; ***************************************************
CreateImage(#image_modifie, image_file\Largeur_image,image_file\hauteur_image)
StartDrawing(ImageOutput(#image_modifie))
For x=1 to image_file\Largeur_image-1
For y=1 to image_file\hauteur_image-1
newX.d = x - halfWidth.d
newY.d = y - halfHeight.d
distance.d = (pow(newX.d ,2) +pow( newY.d , 2))
r.d = (distance.d / correctionRadius.d)
if r.d <> 0
theta.d= ATan(r.d )/r.d
sourceX = halfWidth.d + (theta.d * newX.d * image_file\pos_curs_zoom)
sourceY = halfHeight.d + (theta.d * newY.d * image_file\pos_curs_zoom)
if (sourceX>1 and sourceY>1) and (sourceX<image_file\largeur_image and sourceY<image_file\hauteur_image)
plot (x,y,Image_or(sourceX,sourceY))
Endif
Endif
Next y
SetGadgetState(#progress_calcul, x)
Next x
StopDrawing()
; ***************************************************
; ResizeImage(#image_modifie,image_file\Largeur_image+curs.d, image_file\hauteur_image+curs.d)
; GrabImage(#image_modifie,#image_modifie2,curs.d,curs.d,image_file\Largeur_image-curs.d, image_file\hauteur_image-curs.d)
;
; CopyImage(#image_modifie2,#image_modifie_gadget)
; ResizeImage(#image_modifie_gadget,GadgetWidth(#Image_0),GadgetHeight(#Image_0))
curs.d=GetGadgetState(#scrollbar_zoom)
ResizeImage(#image_modifie,image_file\Largeur_image+curs.d, image_file\hauteur_image+curs.d)
GrabImage(#image_modifie,#image_modifie2,curs.d,curs.d,image_file\Largeur_image-curs.d, image_file\hauteur_image-curs.d)
CopyImage(#image_modifie2,#image_modifie_gadget)
ResizeImage(#image_modifie_gadget,GadgetWidth(#Image_0),GadgetHeight(#Image_0))
SetGadgetState(#Image_1, imageId(#image_modifie_gadget))
SetGadgetState(#progress_calcul, 0)
Endif
EndSelect
; ////////////////////////
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Win
If Openfile(#file,GetCurrentDirectory()+"Pure_defisher.ini")
;-save_ini
writeStringN(#file,image_file\here.s);|
WriteInteger(#file,GetGadgetState(#ScrollBar_Force))
WriteFloat(#file,GetGadgetState(#ScrollBar_zoom))
WriteInteger(#file,GetGadgetState(#scrollbar_eff_x))
WriteInteger(#file,GetGadgetState(#scrollbar_eff_y))
Else
image_file\here.s=GetCurrentDirectory()
Endif;]
CloseWindow(#Win)
Break
EndSelect
EndSelect
Forever
;
;}
;- Procedures Zone
Procedure OpenWindow_Win()
If OpenWindow(#Win, 271, 98, 886, 550, "Pure_defisher by Dobro", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
If CreateGadgetList(WindowID(#Win))
ImageGadget(#Image_0, 430, 10, 325, 235, 0, #PB_Image_Border)
ImageGadget(#Image_1, 430, 270, 325, 235, 0, #PB_Image_Border)
TextGadget(#Text_force, 20, 100, 50, 20, "Force")
ScrollBarGadget(#ScrollBar_Force, 70, 100, 350, 15, 1, 10000, 100)
TextGadget(#Text_zoom, 20, 120, 50, 20, "Zoom")
ScrollBarGadget(#ScrollBar_zoom, 70, 120, 350, 15, 1, 300, 10)
TextGadget(#Text_eff_x, 20, 140, 50, 20, "effect x")
ScrollBarGadget(#ScrollBar_eff_x, 70,140, 350, 15, 1, 30, 10)
TextGadget(#Text_eff_y, 20, 160, 50, 20, "effect y")
ScrollBarGadget(#ScrollBar_eff_y, 70, 160, 350, 15, 1, 30, 10)
ButtonGadget(#Button_reset, 20, 180, 80, 25, "reset")
TextGadget(#Text_Titre, 100, 15, 185, 40, "Pure_Defisher")
TextGadget(#Text_auteur, 245, 55, 50, 20, "By Dobro")
ButtonGadget(#Button_Load, 10, 440, 80, 25, "Load")
ButtonGadget(#Button_Save, 10, 470, 80, 25, "Save")
ButtonGadget(#Button_calcul, 10, 375, 55, 50, "Calcul")
ProgressBarGadget(#progress_calcul, 70, 375+35,150, 15, 1, 100)
; Gadget Fonts
SetGadgetFont(#Text_Titre, LoadFont(#Font_Text_Titre, "Arial", 20, #PB_Font_HighQuality))
EndIf
EndIf
EndProcedure