[CREATE] Draft Lens Correction Database

Jon Phillips jon at rejon.org
Wed Jun 20 13:33:31 PDT 2007


On Tue, 2007-06-19 at 14:23 -0400, Yuval Levy wrote:
> Hi all,
> 
> I have not had all the time I wanted to dedicate to this, so it is 
> uncomplete. Herewith I share the current draft, hoping that somebody 
> will pick it up and continue from here.
> 
> Architecture: a mysql database with web based input / output. Export 
> format, relevant for the desktop tools using the db, XML.
> 
> Two type of inputs: deterministic (i.e. specific correction parameters 
> as determined by a volunteer who intended to calibrate the lens) and 
> stochastic (i.e. the parameters obtained while optimizing a hugin 
> project). Credit goes to Bruno Postle and JD Smith on the hugin-ptx list 
> for this second approach. In both approaches the critical settings are 
> proper physical lens set up. The deterministic approach relies on the 
> volunteer to set 100% perfectly, which is seldom the case. The 
> stochastic approach is based on mean-reversion and relies on the fact 
> that the set up errors of many users in many project will cancel each 
> other out.
> 
> In the output, the user is free to decide on which of the two processes 
> he prefers to rely. Can output the whole database, or lens/camera 
> specific XML.
> 
> The database is in the attachement, with a bit more analysis and a short 
> todo list.
> 
> License is http://creativecommons.org/licenses/by/3.0/ - though this 
> code could be released in the public domain as far as I am concerned. 
> The value here is not the code, but the data in the database which takes 
> a lot of effort to collect and refine.

Actually, I would recommend that the data should be copyright free. This
is the current stance of Creative Commons and others in the commons
movement wrt to data. The upcoming CC jurisdiction ports (3.0) are going
to waive database rights, so I think all versions of this data expressed
on the site should be CC BY 3.0, but the data in the databases should be
copyright free (ie, not governed by copyright).

Jon

> Comments and critique welcome.
> 
> enjoy the summer!
> Yuv
> http://www.photopla.net/070606main.php
> plain text document attachment (lensdb.sql)
> (C) 2007 Yuval Levy, released under http://creativecommons.org/licenses/by/3.0/
> 
> 1. INPUT
> 
> This database will accept two types of lens calibration profiles:
> deterministic and stochastic. The stochastic process was suggested by Bruno
> Postle and JD Smith on the hugin-ptx mailing list.
> 
> 1.1. DETERMINISTIC PROCESS
> * volunteer logs in to the web based system
> * volunteer fills out a web based form to populate ci_calinfo as well as
>   one instance of distorsion and vignetting parameters. One hit on the
>   form per each set of focal distance and aperture. Up to four files
>   (three images and one hugin project file) per hit will be stored.
> * maintainer goes over new entries in ci_calinfo and assigns ambiguous
>   camera/lens definition to unique disambiguated id
> * maintainer verifies calibration
> 
> 
> 1.2. STOCHASTIC PROCESS
> * user create a login to the web based system
> * user allows hugin to transfer relevant project information
>   (calibration parameters)
> * each project generates a hit on the database and populates ci_calinfo as well
>   as one instance of distorsion and vignetting parameters.
> * hugin might send in an evaluation of how good the parameters are
>   (Pablo d'Angelo)
> * maintainer uses statistic tools and methods to weed out stray parameters and
>   come up with a calibration output that is then exported via XML.
> 
> The database is expandable: when new/different/better algorithms become known
> (such as suggested by Alexandre Jenny on hugin-ptx), a new table can be added
> for those parameters, like the vi_vignetting table if the parameters are
> aperture-dependent or by expanding the dp_distorsion table if they are only
> focal-length dependent.
> 
> 2. OUTPUT
> 
> The PHP code will generate, based on selection parameters, an XML export for
> selected camera/lens combos. Selection parameters are:
> - type of profile (deterministic/stochastic)
> - quality level
> -- deterministic: level of approval by maintainer
> -- stochastic: acceptable standard deviation range from which output parameters
>    are calculated
> -- camera (or: all cameras)
> -- lens (or: all lenses)
> 
> 3. TO DO:
> - clean up the data structure
> - write PHP code / forms to populate it
> - write PHP code to export XML
> 
> 
> 
> 
> # could split into different tables so that additional algorythms
> # would get new tables or additional algorythms just make the table
> # larger
> # xml export format does not really matter, since tags can be
> # added/expanded
> # so far, there is one table for focal-length only dependent
> # corrections and one for the combination of focal-length and aperture
> 
> QUESTION:
> Does it make sense to add mount information in cl_camera2lens?
> or even in an extra table?
> 
> 
> #--------------------------------------------------------
> # Table:        ur_user
> # Date:         2007-may-11
> # Description:	user static data
> #--------------------------------------------------------
> CREATE TABLE ur_user (
> 	# unique user identifier
> 	ur_uid INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
> 	# first name
> 	ur_pname CHAR(50),
> 	# last name
> 	ur_lname CHAR(50),
> 	# email
> 	ur_email CHAR(50),
> 	# password
> 	ur_password CHAR(50),
> 	# status
> 	ur_status SMALLINT(6) UNSIGNED DEFAULT 0 NOT NULL,
> 	# keys
> 	PRIMARY KEY uid(ur_uid)
> );
> 
> 
> 
> #--------------------------------------------------------
> # Table:		ci_calinfo
> # Date:			2007-may-11
> # Description:	calibration info settings
> #--------------------------------------------------------
> CREATE TABLE ci_calinfo (
> 	# unique set of calibration information
> 	ci_cid INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
> 	# disambiguation
> 	ci_lid INT(11) UNSIGNED,
> 	# project file
> 	ci_pto CHAR(50),
> 	# input image 1
> 	ci_img1 CHAR(50),
> 	# input image 2
> 	ci_img2 CHAR(50),
> 	# input image 3
> 	ci_img3 CHAR(50),
> 	# entered lens description
> 	ci_lens CHAR(100),
> 	# entered lens description detail
> 	ci_detail TEXT,
> 	# entered camera make
> 	ci_camera CHAR(100),
> 	# entered manufacturer
> 	ci_manu CHAR(100),
> 	# entered camera type
> 	ci_type TINYINT(2),
> 	# entered min focal length
> 	ci_min_fl CHAR(10),
> 	# entered max focal length
> 	ci_max_fl CHAR(10),
> 	# entered max aperture
> 	ci_max_f CHAR(10),
> 	# entered conversion factor
> 	ci_conv CHAR(10),
> 	# associated distorsion parameters
> 	ci_did INT(11) UNSIGNED,
> 	# associated vignetting parameters
> 	ci_aid INT(11) UNSIGNED,
> 	# management process: user who entered the calibration
> 	ci_uid INT(11) UNSIGNED NOT NULL,
> 	# management process: maintainer assigned to verify
> 	ci_mid INT(11) UNSIGNED NOT NULL,
> 	# management process: status of the data
> 	ci_status TINYINT(2) UNSIGNED DEFAULT 0,
> 
> # add timestamps
> # add keys
> # add hugin version information
> # add contributing software / version
> )
> 
> #--------------------------------------------------------
> # Table:        cl_camera2lens
> # Date:         2007-may-11
> # Description:	entry for camera in the lens
> #--------------------------------------------------------
> CREATE TABLE cl_camera2lens (
> 	# identifier of camera
> 	cl_cid int(11) UNSIGNED NOT NULL,
> 	# identifier of lens
> 	cl_lid int(11) UNSIGNED NOT NULL,
> 	# keys
> 	PRIMARY KEY (cl_cid, cl_lid)
> );
> 
> #--------------------------------------------------------
> # Table:		ls_lens
> # Date:			2007-may-11
> # Description:	static lens info
> #--------------------------------------------------------
> CREATE TABLE ls_lens (
> 	# unique lens/camera identifier - also used
> 	# for disambiguation in the XML output
> 	ls_lid INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
> 	# lens description (can be ambiguous)
> 	ls_lens CHAR(50),
> 	# lens/camera details
> 	ls_details TEXT,
> 	# crop factor belongs theoretically to the camera
> 	# but has an influence on the correction params
> 	# and is used only for disambiguation
> 	ls_crop DECIMAL(3,2),
> 	# min focal length
> 	ls_min_fl DECIMAL(5,0),
> 	# max focal length
> 	ls_max_fl DECIMAL(5,0),
> 	# max aperture
> 	ls_max_f DECIMAL(3,1),
> 	# lens type
> 	ls_type TINYINT(2) UNSIGNED NOT NULL,
> 	# management process: maintainer responsible for this entry
> 	ls_mid INT(11) UNSIGNED NOT NULL,
> 	# management process: status of the data
> 	ls_status TINYINT(2) UNSIGNED DEFAULT 0,
> 	# keys
> 	KEY t(ls_type),
> 	PRIMARY KEY (ls_lid)
> )
> 
> #--------------------------------------------------------
> # Table:		ca_camera
> # Date:			2007-may-11
> # Description:	static camera info
> #--------------------------------------------------------
> CREATE TABLE ca_camera (
> 	# unique camera identifier
> 	ca_cid INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
> 	# manufacturer
> 	ca_manu CHAR(50),
> 	# camera text description
> 	ca_camera CHAR(50),
> 	# crop factor 
> 	ca_crop DECIMAL(3,2),
> 	# camera type
> 	ca_type TINYINT(2),
> 	# keys
> 	PRIMARY KEY (ca_cid),
> 	KEY c(ca_camera),
> 	KEY m(ca_manu),
> 	KEY t(ca_type)
> )
> 
> 
> #--------------------------------------------------------
> # Table:		fl_focal
> # Date:			2007-may-11
> # Description:	entry for a single focal length
> #--------------------------------------------------------
> CREATE TABLE fl_focal (
> 	# unique focal length identifier
> 	fl_fid INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
> 	# applicable focal length
> 	fl_fl SMALLINT(5) UNSIGNED,
> 	# management process: user responsible for this entry
> 	fl_uid INT(11) UNSIGNED NOT NULL,
> 	# management process: status of the data
> 	fl_status TINYINT(2) UNSIGNED DEFAULT 0,
> 	# keys
> 	PRIMARY KEY (fl_fid),
> 	KEY uid(fl_uid),
> 	KEY status(fl_status)
> )
> 
> #--------------------------------------------------------
> # Table:		dp_distorsion
> # Date:			2007-may-11
> # Description:	perspective distorsion and chromatic
> #				aberration parameters that depends only
> #				on the focal length.
> #				multiple / ambiguous entries possible
> #--------------------------------------------------------
> CREATE TABLE dp_distorsion (
> 	# unique identifier for this set of parameters
> 	dp_did INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
> 	# unique focal length id to which this aperture belongs
> 	dp_fid INT(11) UNSIGNED,
> 	# radial distortion correction parameters, as in PTLens
> 	dp_a DECIMAL(10,7),
> 	dp_b DECIMAL(10,7),
> 	dp_c DECIMAL(10,7),
> 	# transverse chromatic aberration red
> 	dp_tcar_a DECIMAL(10,7),
> 	dp_tcar_b DECIMAL(10,7),
> 	dp_tcar_c DECIMAL(10,7),
> 	# transverse chromatic aberration blue
> 	dp_tcab_a DECIMAL(10,7),
> 	dp_tcab_b DECIMAL(10,7),
> 	dp_tcab_c DECIMAL(10,7),
> 	# management process: user that entered the data
> 	dp_uid INT(11) UNSIGNED NOT NULL,
> 	# management process: status of the data
> 	dp_status TINYINT(2) UNSIGNED DEFAULT 0,
> 	# keys
> 	PRIMARY KEY (dp_did),
> 	KEY fid(dp_fid),
> 	KEY uid(dp_uid),
> 	KEY status(dp_status)
> )
> 
> 
> #--------------------------------------------------------
> # Table:		vi_vignetting
> # Date:			2007-may-11
> # Description:	parameters for a single aperture
> #--------------------------------------------------------
> CREATE TABLE vi_vignetting (
> 	# unique aperture/vignetting identifier
> 	vi_vid INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
> 	# unique focal length id to which these aperture
> 	# vignetting parameters belongs
> 	vi_fid INT(11) UNSIGNED,
> 	# applicable aperture
> 	vi_ap DECIMAL(3,1) UNSIGNED,
> 	# vignetting correction
> 	vi_b DECIMAL(10,7),
> 	vi_c DECIMAL(10,7),
> 	vi_d DECIMAL(10,7),
> 	# management process: user that entered the data
> 	vi_uid INT(11) UNSIGNED NOT NULL,
> 	# management process: status of the data
> 	vi_status TINYINT(2) UNSIGNED DEFAULT 0,
> 	# primary key
> 	PRIMARY KEY (vi_aid),
> 	KEY fid(vi_fid),
> 	KEY uid(vi_uid),
> 	KEY status(vi_status)
> )
> 	
> 
> _______________________________________________
> CREATE mailing list
> CREATE at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/create
-- 
Jon Phillips

San Francisco, CA
USA PH 510.499.0894
jon at rejon.org
http://www.rejon.org

MSN, AIM, Yahoo Chat: kidproto
Jabber Chat: rejon at gristle.org
IRC: rejon at irc.freenode.net



More information about the CREATE mailing list