Change log This article contains detailed change information for each release. Revise --version to include ImageMagick library information. reviseversiontoincludeimagemagicklibraryinformation Add ditz issue database and package document BUG-REPORTING. addditzissuedatabaseandpackagedocumentbugreporting Refine warnings for 8-bit output when --16bpc (incl. default). refinewarningsfor8bitoutputwhen16bpcincldefault Fix --16bpc default behavior. fix16bpcdefaultbehavior Fixed serious memory leak in alignment code, and less serious leaks. fixedseriousmemoryleakinalignmentcodeandlessseriousleaks Fix 'exec -a' bashism in ale script, after this was reported by Mihai Varzaru as being broken in Ubuntu 8.10. fixexecabashisminalescriptafterthiswasreportedbymihaivarzaruasbeingbrokeninubuntu810 Update documentation makefile for better links compatibility. updatedocumentationmakefileforbetterlinkscompatibility Use a pager (e.g., less) when displaying help. useapagereglesswhendisplayinghelp Add a man page, at the recommendation of Debian developer Ruben Molina. The man page structure roughly follows that of Debian Iceweasel, GNU tar, and the earlier ALE manual page for Debian by Nick Rusnov and Ruben Molina. addamanpageattherecommendationofdebiandeveloperrubenmolinathemanpagestructureroughlyfollowsthatofdebianiceweaselgnutarandtheearlieralemanualpagefordebianbynickrusnovandrubenmolina Add new algorithms for pixel assignment in multi-alignment, including filling, least-size local selection, and global-best selection. addnewalgorithmsforpixelassignmentinmultialignmentincludingfillingleastsizelocalselectionandglobalbestselection Fix various multi-alignment bugs, including a bug causing increased computational complexity for rendering, as well as offset and scaling bugs. fixvariousmultialignmentbugsincludingabugcausingincreasedcomputationalcomplexityforrenderingaswellasoffsetandscalingbugs Modify --lod-max to --lod-preferred, add a dimension restriction --min-dimension on level-of-detail, and make --lod-preferred=-3 and --min-dimension=10 default. modifylodmaxtolodpreferredaddadimensionrestrictionmindimensiononlevelofdetailandmakelodpreferred3andmindimension10default Revise DejaGNU test suite for current option syntax, so that "make check" now runs all tests. revisedejagnutestsuiteforcurrentoptionsyntaxsothatmakechecknowrunsalltests Do not attempt to handle --trans-{save,load} arguments as images in the ale wrapper script. donotattempttohandletranssaveloadargumentsasimagesinthealewrapperscript Add include <string.h> to ui/ui.h in an attempt to resolve Debian bug #482765, reported by Marc Brockschmidt and noted by Ruben Molina. addincludeltstringhtouiuihinanattempttoresolvedebianbug482765reportedbymarcbrockschmidtandnotedbyrubenmolina Include more information about scale cluster structures in the logging ui. includemoreinformationaboutscaleclusterstructuresintheloggingui Add tonal registration by element to multi-alignment code. addtonalregistrationbyelementtomultialignmentcode Add a minimum average certainty for registration of multi-alignment elements. addaminimumaveragecertaintyforregistrationofmultialignmentelements Modify ale script to tally thread statistics when the environment variable ALE_COUNT_THREADS is set non-zero. modifyalescripttotallythreadstatisticswhentheenvironmentvariableale_count_threadsissetnonzero Add skeletal web documentation to the documentation tree, in doc/web, and revise this to consolidate more information on the front page. addskeletalwebdocumentationtothedocumentationtreeindocwebandrevisethistoconsolidatemoreinformationonthefrontpage Implement an alignment technique allowing multiple alignments for a single frame. Handling parts of a frame separately to resolve alignment issues (but using match thresholding to discard regions instead of using multiple alignments) was suggested by Rob Stewart. implementanalignmenttechniqueallowingmultiplealignmentsforasingleframehandlingpartsofaframeseparatelytoresolvealignmentissuesbutusingmatchthresholdingtodiscardregionsinsteadofusingmultiplealignmentswassuggestedbyrobstewart Add --resident parameter, allowing explicit allocation of backing store for (e.g., large) image data structures. addresidentparameterallowingexplicitallocationofbackingstoreforeglargeimagedatastructures Check for NaN in linearization and unlinearization in exposure_default, as a possible fix for a segmentation fault reported by Bret Towe. checkfornaninlinearizationandunlinearizationinexposure_defaultasapossiblefixforasegmentationfaultreportedbybrettowe Revise certain code for improved execution speed, including disabling certain assertions and reducing calls to pow(). revisecertaincodeforimprovedexecutionspeedincludingdisablingcertainassertionsandreducingcallstopow Replace geometric-mean filtering of weight values with minimum-value filtering, reducing calls to pow(). replacegeometricmeanfilteringofweightvalueswithminimumvaluefilteringreducingcallstopow Add fixed-point data types selectable at configuration time for coordinate and color data, hence improving speed on certain embedded platforms. Use on phones was suggested by Wen Guihua. addfixedpointdatatypesselectableatconfigurationtimeforcoordinateandcolordatahenceimprovingspeedoncertainembeddedplatformsuseonphoneswassuggestedbywenguihua Revise incremental rendering code to store color values unnormalized by weights. reviseincrementalrenderingcodetostorecolorvaluesunnormalizedbyweights Revise multi-alignment options for the currently-considered implementation. revisemultialignmentoptionsforthecurrentlyconsideredimplementation Eliminate NaN propagation that could lead to alignment failure in certain cases, perhaps causing an alignment bug reported in earlier versions by Gregory Maxwell. eliminatenanpropagationthatcouldleadtoalignmentfailureincertaincasesperhapscausinganalignmentbugreportedinearlierversionsbygregorymaxwell Change 'char *' referencing string literals to 'const char *'. changecharreferencingstringliteralstoconstchar Set perturbation multipliers to 1 in cases of a non-finite value. setperturbationmultipliersto1incasesofanonfinitevalue Add threading for d2::image::*scale_by_half() functions. addthreadingford2imagescale_by_halffunctions Always rescale transformations for full detail after alignment is complete. alwaysrescaletransformationsforfulldetailafteralignmentiscomplete Make --lod-max=-4 default. makelodmax4default Make default --dchain auto:triangle:2,fine:box:1,triangle:2, which should produce better output during re-filtering than the previous default. makedefaultdchainautotriangle2finebox1triangle2whichshouldproducebetteroutputduringrefilteringthanthepreviousdefault Revise re-filtering operation to use as a filter scale the distance between nearest defined points in opposite axis-centered cones about the point to be filtered. reviserefilteringoperationtouseasafilterscalethedistancebetweennearestdefinedpointsinoppositeaxiscenteredconesaboutthepointtobefiltered Update scale cluster structures and interpolation routines used in alignment for calculating and storing certainty and weights; in particular, certainty of the input frame is now pre-calculated for multiple levels of detail. updatescaleclusterstructuresandinterpolationroutinesusedinalignmentforcalculatingandstoringcertaintyandweightsinparticularcertaintyoftheinputframeisnowprecalculatedformultiplelevelsofdetail Add currently-unused skeletal code for non-linear level of detail calculations. addcurrentlyunusedskeletalcodefornonlinearlevelofdetailcalculations Revise Monte-carlo value to use a single static default, removing dynamic behavior and certain associated support code, and applying the sampling rate in a uniform manner to all levels of detail and all tonal and spatial registration algorithms. revisemontecarlovaluetouseasinglestaticdefaultremovingdynamicbehaviorandcertainassociatedsupportcodeandapplyingthesamplingrateinauniformmannertoalllevelsofdetailandalltonalandspatialregistrationalgorithms Fix error in level-of-detail accounting in alignment code. fixerrorinlevelofdetailaccountinginalignmentcode Replace references to math.h with references to ale_math.h. replacereferencestomathhwithreferencestoale_mathh Attempt to resolve certain 'always true' warnings reported by Marius Schamschula on Mac OS 10.3.9 (PPC). attempttoresolvecertainalwaystruewarningsreportedbymariusschamschulaonmacos1039ppc Add macros for isinf() and isnan() in an attempt to resolve build failures reported by Marius Schamschula on Mac OS 10.3.9 (PPC). addmacrosforisinfandisnaninanattempttoresolvebuildfailuresreportedbymariusschamschulaonmacos1039ppc Resolve certain build errors occuring when configuring --disable-threads, or when threads are unavailable. resolvecertainbuilderrorsoccuringwhenconfiguringdisablethreadsorwhenthreadsareunavailable Remove instrumentation writing to 'lsimulated.png'. removeinstrumentationwritingtolsimulatedpng Set new defaults for --ips, --dchain, and --3d-dchain, and remove --q* setnewdefaultsforipsdchainand3ddchainandremoveq Add rendering chain scaled sampling filter type auto:, implementing re-filtering, with rough automatic filter size determination. addrenderingchainscaledsamplingfiltertypeautoimplementingrefilteringwithroughautomaticfiltersizedetermination Add an abstract domain decomposition threading class. addanabstractdomaindecompositionthreadingclass Revise Irani-Peleg code for reduced memory and cpu use. reviseiranipelegcodeforreducedmemoryandcpuuse Attempt to fix exclusion region handling after a bug report by Gregory Maxwell; other issues may remain. attempttofixexclusionregionhandlingafterabugreportbygregorymaxwellotherissuesmayremain Fix handling of --ip-{mean,median}, resolving a bug noted by Gregory Maxwell. fixhandlingofipmeanmedianresolvingabugnotedbygregorymaxwell Add wrapper script 'ale' for handling raw files and extracting Exif metadata. addwrapperscriptaleforhandlingrawfilesandextractingexifmetadata Allow any match when the threshold specified is neither positive nor zero. allowanymatchwhenthethresholdspecifiedisneitherpositivenorzero Update license to GPLv3. updatelicensetogplv3 Various rendering bugfixes. variousrenderingbugfixes Disable d2::gauss::cutoff definition after a build failure reported by Marius Schamschula on an Intel Mac running 10.4.9 (gcc 4.0.0?). disabled2gausscutoffdefinitionafterabuildfailurereportedbymariusschamschulaonanintelmacrunning1049gcc400 Include an incomplete implementation for multiple alignment region handling. includeanincompleteimplementationformultiplealignmentregionhandling Make --16bpc default. make16bpcdefault Add extents calculation to d2::render::ipc to limit the area examined during exposure re-estimation. addextentscalculationtod2renderipctolimittheareaexaminedduringexposurereestimation Provide a new cache of fixed size for input images, defaulting to 256MB, adjustable via the --cache option. provideanewcacheoffixedsizeforinputimagesdefaultingto256mbadjustableviathecacheoption Add error statistics for calculating center of rotation and perturbation size for alignment. adderrorstatisticsforcalculatingcenterofrotationandperturbationsizeforalignment Add loop avoidance for dynamic monte carlo alignment. addloopavoidancefordynamicmontecarloalignment Reduce --mcd-removal default to 10. reducemcdremovaldefaultto10 Use synchronized instead of unsynchronized dynamic monte carlo removal checks. usesynchronizedinsteadofunsynchronizeddynamicmontecarloremovalchecks Disable --follow in the non-default case when perturbation size is zero. disablefollowinthenondefaultcasewhenperturbationsizeiszero Make --no-inc default. makenoincdefault Add 'defaults' global search option, and make this option default. adddefaultsglobalsearchoptionandmakethisoptiondefault Modify --gs-mo to allow specification as a percentage, and make 67% default. modifygsmotoallowspecificationasapercentageandmake67default Add user interface options --ui=log and --ui=quiet, with greater and lesser verbosity, respectively. adduserinterfaceoptionsuiloganduiquietwithgreaterandlesserverbosityrespectively Modify black level handling to always use linear values. modifyblacklevelhandlingtoalwaysuselinearvalues Increase default barrel distortion multiplier and rate maximum to 2.0 and 8.0, respectively. increasedefaultbarreldistortionmultiplierandratemaximumto20and80respectively Revise ordering of ui_tty status output so that more informative fields occur earlier in the string. reviseorderingofui_ttystatusoutputsothatmoreinformativefieldsoccurearlierinthestring Modify numerical formatting of certain UI elements to preserve constancy of field locations in typical cases. modifynumericalformattingofcertainuielementstopreserveconstancyoffieldlocationsintypicalcases Add Gaussian PSF. (HJ Hornbeck) addgaussianpsfhjhornbeck Recalculate diff statistics after increasing the mc parameter in dynamic monte carlo alignment. recalculatediffstatisticsafterincreasingthemcparameterindynamicmontecarloalignment Update Nikon D50 PSF. (HJ Hornbeck) updatenikond50psfhjhornbeck Add UI update thread, in cases where threads are available. adduiupdatethreadincaseswherethreadsareavailable Allow file-scoped --gs and --gs-mo options. allowfilescopedgsandgsmooptions Ignore fex regions for nex SSFEs, resolving a bug noted by Gregory Maxwell. ignorefexregionsfornexssfesresolvingabugnotedbygregorymaxwell Add --black option for specifying black level as a fraction of saturation. addblackoptionforspecifyingblacklevelasafractionofsaturation Add --ev option for specifying ISO100-equivalent EV. addevoptionforspecifyingiso100equivalentev Add breakdown of profiling information by perturbation size for local alignment. addbreakdownofprofilinginformationbyperturbationsizeforlocalalignment Add a weight-limiting option to the Irani-Peleg renderer. addaweightlimitingoptiontotheiranipelegrenderer Add incremental renderer mean invariant avgf:<x>:<e> weight-limited to initial values. addincrementalrenderermeaninvariantavgfltxlteweightlimitedtoinitialvalues Modify d2::image::defined_scale_by_half() to use a geometric mean, so that alignment at reduced level of detail will still work at larger reductions when using non-zero certainty. modifyd2imagedefined_scale_by_halftouseageometricmeansothatalignmentatreducedlevelofdetailwillstillworkatlargerreductionswhenusingnonzerocertainty In d2::align, use rotation about the frame center as an alternative in cases where the sampling centroid is undefined. ind2alignuserotationabouttheframecenterasanalternativeincaseswherethesamplingcentroidisundefined Modify d2::point::{neg,pos}inf() assertions to allow for isinf() implementations returning any non-zero value for any infinity. modifyd2pointnegposinfassertionstoallowforisinfimplementationsreturninganynonzerovalueforanyinfinity Re-adjust exposure in Irani-Peleg even when no non-linear stage is present. readjustexposureiniranipelegevenwhennononlinearstageispresent Adjust the default pixel definition threshold to account for the certainty floor. adjustthedefaultpixeldefinitionthresholdtoaccountforthecertaintyfloor Use a rudimentary, single-pass estimate-based certainty approach for incremental rendering. usearudimentarysinglepassestimatebasedcertaintyapproachforincrementalrendering When --cx is positive, use only certainty calculated from the simulated scene for estimating tonal registration in Irani-Peleg passes. whencxispositiveuseonlycertaintycalculatedfromthesimulatedsceneforestimatingtonalregistrationiniranipelegpasses Remove --qr default setting, as certainty and range-extension now have established general defaults. removeqrdefaultsettingascertaintyandrangeextensionnowhaveestablishedgeneraldefaults Change --cx to 1 by default. Change --exp-extend to be disabled by default. Remove these flags from default settings. changecxto1bydefaultchangeexpextendtobedisabledbydefaultremovetheseflagsfromdefaultsettings Update driver names to omit file type qualifiers, according to the convention used in HJ Hornbeck's Nikon D50 device configuration patch. updatedrivernamestoomitfiletypequalifiersaccordingtotheconventionusedinhjhornbecksnikond50deviceconfigurationpatch Add Nikon D50 device configuration. (HJ Hornbeck) addnikond50deviceconfigurationhjhornbeck Update default settings according to time and image quality test results. fine:triangle:2, gauss:0.75, and combinations of these filters were suggested by HJ Hornbeck. updatedefaultsettingsaccordingtotimeandimagequalitytestresultsfinetriangle2gauss075andcombinationsofthesefiltersweresuggestedbyhjhornbeck Revise incremental renderer to store unnormalized values, for better handling of small weights, and eliminate the minimum contribution weight. reviseincrementalrenderertostoreunnormalizedvaluesforbetterhandlingofsmallweightsandeliminatetheminimumcontributionweight Add inlining and pre-calculation to Irani-Peleg. (HJ Hornbeck) addinliningandprecalculationtoiranipeleghjhornbeck Add gaussian sampling filter. (HJ Hornbeck) addgaussiansamplingfilterhjhornbeck Remove binaries and documentation sections from the readme, and prune non-package documentation for source distributions. removebinariesanddocumentationsectionsfromthereadmeandprunenonpackagedocumentationforsourcedistributions Make the --follow alignment option default. makethefollowalignmentoptiondefault Add help text for argument scope. addhelptextforargumentscope Modify rotational alignment search to rotate about the centroid of the sample region. modifyrotationalalignmentsearchtorotateaboutthecentroidofthesampleregion Revert 3D code to experimental status due to poor handling of real image sets. revert3dcodetoexperimentalstatusduetopoorhandlingofrealimagesets Modify 3D code for slightly better handling of real image sets. modify3dcodeforslightlybetterhandlingofrealimagesets Fix a potential nondeterminism bug due to undefined seed bits in the random number generator. (Fixes certain alignment failures.) fixapotentialnondeterminismbugduetoundefinedseedbitsintherandomnumbergeneratorfixescertainalignmentfailures Modify default settings using Irani-Peleg rendering to use the triangle:2 incremental rendering chain. modifydefaultsettingsusingiranipelegrenderingtousethetriangle2incrementalrenderingchain Add dynamic monte carlo alignment, and make this default. adddynamicmontecarloalignmentandmakethisdefault Correct --exp-mult arg count. (Gregory Maxwell) correctexpmultargcountgregorymaxwell Allow file-scoped use of --perturb-upper. allowfilescopeduseofperturbupper Modify d2::image::scale() to correctly handle offsets for scale factors other than negative powers of two. modifyd2imagescaletocorrectlyhandleoffsetsforscalefactorsotherthannegativepowersoftwo Reformat most help text to fit a 79 column screen. reformatmosthelptexttofita79columnscreen Add option --profile to measure elapsed real time for 2D alignment and rendering operations. addoptionprofiletomeasureelapsedrealtimefor2dalignmentandrenderingoperations Add support for POSIX threads to 2D alignment and rendering code. (Adding multithreading support was first suggested by Jody (Joe) Harris. Testing of multithreaded code on multiprocessor hardware was done by Gregory Maxwell.) addsupportforposixthreadsto2dalignmentandrenderingcodeaddingmultithreadingsupportwasfirstsuggestedbyjodyjoeharristestingofmultithreadedcodeonmultiprocessorhardwarewasdonebygregorymaxwell Incorporate all existing ALE documentation within the source tree, and license under GPL. Begin migration of documentation, including package documentation files, to a more flexible format. incorporateallexistingaledocumentationwithinthesourcetreeandlicenseundergplbeginmigrationofdocumentationincludingpackagedocumentationfilestoamoreflexibleformat Modify ui_tty for correct operation under Hurd and DragonFly consoles. modifyui_ttyforcorrectoperationunderhurdanddragonflyconsoles Revise README for autotools build and installation. revisereadmeforautotoolsbuildandinstallation Add file 'TODO', containing a to-do list for future releases. addfiletodocontainingatodolistforfuturereleases Add AUTHORS file, in accordance with the autotools packaging standards. addauthorsfileinaccordancewiththeautotoolspackagingstandards Revise Changelog name to autotools-approved ChangeLog revisechangelognametoautotoolsapprovedchangelog Add NEWS file containing mailing list and Freshmeat announcement text for versions through 0.8.4. This file is required by autotools. addnewsfilecontainingmailinglistandfreshmeatannouncementtextforversionsthrough084thisfileisrequiredbyautotools Add options --f{ex,crop} for frame-coordinate exclusion regions. addoptionsfexcropforframecoordinateexclusionregions Add autotools-based configuration, build, and installation facilities, replacing the earlier Makefile-based configuration and build process. addautotoolsbasedconfigurationbuildandinstallationfacilitiesreplacingtheearliermakefilebasedconfigurationandbuildprocess Modify --mc to be a file-scoped option. modifymctobeafilescopedoption Modify command-line interface to accept certain scope operators, and to increase uniformity of syntax. modifycommandlineinterfacetoacceptcertainscopeoperatorsandtoincreaseuniformityofsyntax Move input interface details, including option handling, messages, and help information, to the ui/ subdirectory. moveinputinterfacedetailsincludingoptionhandlingmessagesandhelpinformationtotheuisubdirectory In d3::scene, always use filler spaces when --pc all is specified. ind3scenealwaysusefillerspaceswhenpcallisspecified Fix build error noted by Gregory Maxwell and re-tag version. fixbuilderrornotedbygregorymaxwellandretagversion Add fine-grain UI updates for 3D operations when using ui=tty. Reduce tty UI status update frequency to at most once per second. addfinegrainuiupdatesfor3doperationswhenusinguittyreducettyuistatusupdatefrequencytoatmostoncepersecond Modify --3dpx to affect scene geometry rather than rendered pixels. In certain cases, this change should allow removal of objects close to the camera, hence revealing objects further away. modify3dpxtoaffectscenegeometryratherthanrenderedpixelsincertaincasesthischangeshouldallowremovalofobjectsclosetothecamerahencerevealingobjectsfurtheraway Add to the Makefile a HASH_MAP option that can be used to assign the 3D spatial info structure a hash map type instead of the standard STL map type. As this is likely to break things, it is currently undocumented. HASH_MAP=GNU seems to compile with g++ 4.0.x but has not otherwise been tested. addtothemakefileahash_mapoptionthatcanbeusedtoassignthe3dspatialinfostructureahashmaptypeinsteadofthestandardstlmaptypeasthisislikelytobreakthingsitiscurrentlyundocumentedhash_mapgnuseemstocompilewithg40xbuthasnototherwisebeentested Add support for synthetic focus via the --focus option, including focus with horizontal and vertical tilt. Adding simulated focus effects, including tilted and swung focal planes, was suggested by Gregory Maxwell. addsupportforsyntheticfocusviathefocusoptionincludingfocuswithhorizontalandverticaltiltaddingsimulatedfocuseffectsincludingtiltedandswungfocalplaneswassuggestedbygregorymaxwell Add support for filtering 3D output with --3d-filter. This is now the default behavior. Add an option --3d-chain for selecting the filter chain used for 3D output. (See --hl and --hq for details.) addsupportforfiltering3doutputwith3dfilterthisisnowthedefaultbehavioraddanoption3dchainforselectingthefilterchainusedfor3doutputseehlandhqfordetails Fix dimension comparison bug in d3::space::traverse::get_next_split(). fixdimensioncomparisonbugind3spacetraverseget_next_split Implement an experimental approach to 3D subspace candidate selection; this seems to perform poorly in most cases due to parallax effects. See the source code for details. (Option --subspace-traverse) implementanexperimentalapproachto3dsubspacecandidateselectionthisseemstoperformpoorlyinmostcasesduetoparallaxeffectsseethesourcecodefordetailsoptionsubspacetraverse Add adaptive weight decomposition to 3D occupancy algorithms. addadaptiveweightdecompositionto3doccupancyalgorithms Move low-level code concerning scale and level-of-detail from d3::scene to d3::pt. movelowlevelcodeconcerningscaleandlevelofdetailfromd3scenetod3pt Move code concerning the nature of space from d3::scene to d3::space. movecodeconcerningthenatureofspacefromd3scenetod3space Interpolate to generate smooth 3D depth output. interpolatetogeneratesmooth3ddepthoutput Remove older 3D rendering code. removeolder3drenderingcode Add decimation options --di-upper, --di-lower, and --do-try for reducing the complexity of 3D scene geometry, hence reducing the number of operations required for occupancy updating. adddecimationoptionsdiupperdiloweranddotryforreducingthecomplexityof3dscenegeometryhencereducingthenumberofoperationsrequiredforoccupancyupdating Add a script 'transform' for applying an inverse projective transformation. Recalculation of transformations was suggested by Rob Stewart (ALE mailing list message, 2005-Dec-28). addascripttransformforapplyinganinverseprojectivetransformationrecalculationoftransformationswassuggestedbyrobstewartalemailinglistmessage2005dec28 Add dates to the Changelog, using dates in comments in the download page on the website for versions prior to 0.8.0, and using dates from the darcs repository for versions 0.8.0 and later. adddatestothechangelogusingdatesincommentsinthedownloadpageonthewebsiteforversionspriorto080andusingdatesfromthedarcsrepositoryforversions080andlater Add option --3dpx to specify 3D regions to exclude during final rendering, using a single depth for each pixel in each frame of rendered output. (Evaluates at the depth used in depth-rendering.) addoption3dpxtospecify3dregionstoexcludeduringfinalrenderingusingasingledepthforeachpixelineachframeofrenderedoutputevaluatesatthedepthusedindepthrendering Add option --pc to specify which pairwise comparisons should be performed. addoptionpctospecifywhichpairwisecomparisonsshouldbeperformed Add --et option to specify encounter thresholds. addetoptiontospecifyencounterthresholds Clean up d3::scene to remove triangle-mesh code. cleanupd3scenetoremovetrianglemeshcode Add an option --def-nn to allow definition of pixels in output images to take values from neighboring pixels within a certain radius, in cases where they would not otherwise be defined. addanoptiondefnntoallowdefinitionofpixelsinoutputimagestotakevaluesfromneighboringpixelswithinacertainradiusincaseswheretheywouldnototherwisebedefined Modify representation of 3D subspaces so that refined subspaces are roughly cubical, and to allow refinements at multiple resolutions. modifyrepresentationof3dsubspacessothatrefinedsubspacesareroughlycubicalandtoallowrefinementsatmultipleresolutions Fix bugs in 3D color and occupancy updating caused by bounding box miscalculation. fixbugsin3dcolorandoccupancyupdatingcausedbyboundingboxmiscalculation Add option --pa to set the number of point candidates accepted for each pair of cameras (pairwise ambiguity). The default of 3 preserves existing default behavior. addoptionpatosetthenumberofpointcandidatesacceptedforeachpairofcameraspairwiseambiguitythedefaultof3preservesexistingdefaultbehavior Add option --oui for determining occupancy update iterations. The new default is 10, halving the previous default of 20. addoptionouifordeterminingoccupancyupdateiterationsthenewdefaultis10halvingthepreviousdefaultof20 Add option --tcem for scoring point candidates by third-camera views. The default of 0 preserves existing default behavior. addoptiontcemforscoringpointcandidatesbythirdcameraviewsthedefaultof0preservesexistingdefaultbehavior Add magical file 'dump:' for listing color values numerically to stderr. addmagicalfiledumpforlistingcolorvaluesnumericallytostderr Transition from a subdivisible triangle model to a subdivisible space model, using a rudimentary implementation of Hans Moravec's notion of occupancy. transitionfromasubdivisibletrianglemodeltoasubdivisiblespacemodelusingarudimentaryimplementationofhansmoravecsnotionofoccupancy Add support for view and depth output from arbitrary cameras. addsupportforviewanddepthoutputfromarbitrarycameras Add clipping plane options for 3D modeling. addclippingplaneoptionsfor3dmodeling Fix various bugs in control-point alignment reported by Gregory Maxwell. fixvariousbugsincontrolpointalignmentreportedbygregorymaxwell Modify --q1 to use median-value incremental rendering. modifyq1tousemedianvalueincrementalrendering Add support for median-value incremental and Irani-Peleg rendering. Using a statistic other than the mean was suggested by Scott Scriven as a means of eliminating non-uniform artifacts. Using the median seems to improve performance on Scott Scriven's example sequences, as well as on the scaled output of fine:sinc*lanc for sparse inputs. addsupportformedianvalueincrementalandiranipelegrenderingusingastatisticotherthanthemeanwassuggestedbyscottscrivenasameansofeliminatingnonuniformartifactsusingthemedianseemstoimproveperformanceonscottscrivensexamplesequencesaswellasonthescaledoutputoffinesinclancforsparseinputs Move ale-psf-calibrate to a new scripts directory. movealepsfcalibratetoanewscriptsdirectory Add support for using control points in 2D and 3D alignment, as well as in 3D model construction. New options include '--gs points', '--cpf-load=', '--cpp-upper=', '--cpp-lower=', '--va-upper=', and '--st'. addsupportforusingcontrolpointsin2dand3dalignmentaswellasin3dmodelconstructionnewoptionsincludegspointscpfloadcppuppercpplowervaupperandst Fix enumerator compile bugs noted by Gregory Maxwell and Tom Holroyd to cause compilation failure under GCC 3.4. fixenumeratorcompilebugsnotedbygregorymaxwellandtomholroydtocausecompilationfailureundergcc34 Add average magnitude comments to transformation data file output. addaveragemagnitudecommentstotransformationdatafileoutput Add a color adjustment option --exp-mult=. addacoloradjustmentoptionexpmult For 3D scene reconstruction, use a new unified surface model in place of the depth-based multi-model approach used in 0.8.0. The new model is adjusted on the basis of edge, angle, and color measures. for3dscenereconstructionuseanewunifiedsurfacemodelinplaceofthedepthbasedmultimodelapproachusedin080thenewmodelisadjustedonthebasisofedgeangleandcolormeasures Add a flag --exp-meta-only which causes tonal registration to be performed only on the basis of exposure metadata (e.g., data encoded as EPPM extended attributes). This approach was suggested by Gregory Maxwell. addaflagexpmetaonlywhichcausestonalregistrationtobeperformedonlyonthebasisofexposuremetadataegdataencodedaseppmextendedattributesthisapproachwassuggestedbygregorymaxwell Set image offsets in d2/render/combine.h. This allows Irani-Peleg rendering to work with --crop when the default rendering chain includes more than one rendering invariant. setimageoffsetsind2rendercombinehthisallowsiranipelegrenderingtoworkwithcropwhenthedefaultrenderingchainincludesmorethanonerenderinginvariant Perform Irani-Peleg updating separately by channel instead of using vector operations. This allows divide-by-zero and other conditions to be localized to particular channels. performiranipelegupdatingseparatelybychannelinsteadofusingvectoroperationsthisallowsdividebyzeroandotherconditionstobelocalizedtoparticularchannels Modify the Irani-Peleg renderer to use estimate-based certainty. This seems to improve noise characteristics significantly. modifytheiranipelegrenderertouseestimatebasedcertaintythisseemstoimprovenoisecharacteristicssignificantly Write the results of tonal registration as a comment in the transformation data file. writetheresultsoftonalregistrationasacommentinthetransformationdatafile Add support for PPM with extended attributes (EPPM). Attributes handled specially include black level, shutter speed, aperture, and ISO (or gain). addsupportforppmwithextendedattributeseppmattributeshandledspeciallyincludeblacklevelshutterspeedapertureandisoorgain Add experimental cost calculation routines to d3/scene.h. addexperimentalcostcalculationroutinestod3sceneh Modify euclidean alignment so that perturb-upper and perturb-lower apply to rotational arclength. modifyeuclideanalignmentsothatperturbupperandperturblowerapplytorotationalarclength Fix an index variable bug in d2::image_bayer_ale_real::trigger(). fixanindexvariablebugind2image_bayer_ale_realtrigger Modify d2::exposure one-sided certainty so that the 'one-sided' condition only applies to bright (>50%) areas. Applying it to dark areas has no clear benefit, and an experiment by Gregory Maxwell demonstrates that doing so can exacerbate noise. modifyd2exposureonesidedcertaintysothattheonesidedconditiononlyappliestobright50areasapplyingittodarkareashasnoclearbenefitandanexperimentbygregorymaxwelldemonstratesthatdoingsocanexacerbatenoise Modify d2::align to use unscaled input images when the scale factor is larger than 1.0, or when a scaled_filter interpolant is being used. modifyd2aligntouseunscaledinputimageswhenthescalefactorislargerthan10orwhenascaled_filterinterpolantisbeingused Modify d2::image::scale() to allow scale factors in the interval (0, 1), and modify the command-line interface and help text to reflect this change. --scale= now accepts all finite positive values. modifyd2imagescaletoallowscalefactorsintheinterval01andmodifythecommandlineinterfaceandhelptexttoreflectthischangescalenowacceptsallfinitepositivevalues Add user interface options --ui=stream and --ui=tty. The latter includes more detailed status output when terminal width information can be obtained (esp. when IOCTL=1 is set at compile time), and is the new default. adduserinterfaceoptionsuistreamanduittythelatterincludesmoredetailedstatusoutputwhenterminalwidthinformationcanbeobtainedespwhenioctl1issetatcompiletimeandisthenewdefault Move certain user interface elements to the source subdirectory ui/. movecertainuserinterfaceelementstothesourcesubdirectoryui Modify d2::render::ipc::_ip_frame_correct() so that exposure re-estimation uses a ratio of weighted sums instead of a weighted average of ratios. modifyd2renderipc_ip_frame_correctsothatexposurereestimationusesaratioofweightedsumsinsteadofaweightedaverageofratios Modify d2::align::set_exposure_ratio() so that alignment weights and certainty values are taken into consideration. modifyd2alignset_exposure_ratiosothatalignmentweightsandcertaintyvaluesaretakenintoconsideration Add a --cw option to weight alignment error by certainty values, as suggested by Gregory Maxwell. This allows the contributions of pixels at maxval to be diminished, which can increase alignment success in certain cases. addacwoptiontoweightalignmenterrorbycertaintyvaluesassuggestedbygregorymaxwellthisallowsthecontributionsofpixelsatmaxvaltobediminishedwhichcanincreasealignmentsuccessincertaincases Replace functions d2::incremental::{increase,decrease}_extents() with new functions that take exclusion regions into account. The new functions should also fix a boundary-calculation bug reported by Gregory Maxwell. replacefunctionsd2incrementalincreasedecrease_extentswithnewfunctionsthattakeexclusionregionsintoaccountthenewfunctionsshouldalsofixaboundarycalculationbugreportedbygregorymaxwell Modify d2/render/ipc.h to handle exclusion regions more effectively. modifyd2renderipchtohandleexclusionregionsmoreeffectively Add --crop argument, which excludes the spatial complement of a specified area over a specified set of frames. Gregory Maxwell notes several advantages of internal over external crops, including preserving knowledge of position in the uncropped frame, which among other benefits allows natural handling of Bayer patterns. addcropargumentwhichexcludesthespatialcomplementofaspecifiedareaoveraspecifiedsetofframesgregorymaxwellnotesseveraladvantagesofinternaloverexternalcropsincludingpreservingknowledgeofpositionintheuncroppedframewhichamongotherbenefitsallowsnaturalhandlingofbayerpatterns Modify rx_parameters in d2/render.h to use the ale_pos data type instead of int. This should allow exclusion regions to be calculated more accurately. modifyrx_parametersind2renderhtousetheale_posdatatypeinsteadofintthisshouldallowexclusionregionstobecalculatedmoreaccurately Add incremental 3D reconstruction output. addincremental3dreconstructionoutput Remove the reference to a non-existent web page in unsupported::fornow(). removethereferencetoanonexistentwebpageinunsupportedfornow Allow device-specific bayer patterns to be overridden by the --bayer option. allowdevicespecificbayerpatternstobeoverriddenbythebayeroption Add an option for explicitly setting the camera view angle. Make the default view angle 43.7 degrees. addanoptionforexplicitlysettingthecameraviewanglemakethedefaultviewangle437degrees Implement optimizations that reduce the memory footprint when 3D options are used. implementoptimizationsthatreducethememoryfootprintwhen3doptionsareused Modify the 3D cost reduction algorithm. The new algorithm seems to offer better results than the old in cases tested thus far, and does not require that spatial extension be enabled. modifythe3dcostreductionalgorithmthenewalgorithmseemstoofferbetterresultsthantheoldincasestestedthusfaranddoesnotrequirethatspatialextensionbeenabled Add support for the Canon 300D with a 50mm f/1.4 lens (specifying view angle), as well as experimental support for the 50mm f/1.4 lens at 1.4 (specifying a linear PSF). Also add support for 50mm f/1.8 and 85mm f/1.8 lenses, specifying view angles as specified in the chart at http://www.acapixus.dk/photography/angle_of_view.htm addsupportforthecanon300dwitha50mmf14lensspecifyingviewangleaswellasexperimentalsupportforthe50mmf14lensat14specifyingalinearpsfalsoaddsupportfor50mmf18and85mmf18lensesspecifyingviewanglesasspecifiedinthechartathttpwwwacapixusdkphotographyangle_of_viewhtm Don't output final data when --psf-match is specified. Doing so would be useless anyway, and apparently causes a segfault. dontoutputfinaldatawhenpsfmatchisspecifieddoingsowouldbeuselessanywayandapparentlycausesasegfault For cases where --psf-match is specified, modify the exposure settings for the final input image (i.e., reference image) so that default exposure is used, and modify the bayer pattern settings so that no bayer pattern is used. (The first of these modifications requires changes in the way that the array of input exposures is stored.) forcaseswherepsfmatchisspecifiedmodifytheexposuresettingsforthefinalinputimageiereferenceimagesothatdefaultexposureisusedandmodifythebayerpatternsettingssothatnobayerpatternisusedthefirstofthesemodificationsrequireschangesinthewaythatthearrayofinputexposuresisstored Optionally (when OPTIMIZATIONS == 1) use the output of the default rendering chain directly as the Irani-Peleg initial approximation, instead of copying it. optionallywhenoptimizations1usetheoutputofthedefaultrenderingchaindirectlyastheiranipeleginitialapproximationinsteadofcopyingit Add support for PSF convolution and scalar multiplication. addsupportforpsfconvolutionandscalarmultiplication Move all PSF parsing logic to a new file: d2/render/psf/psf_parse.h moveallpsfparsinglogictoanewfiled2renderpsfpsf_parseh Modify help argument processing so that several help arguments can be specified at a time. Change the usage text to reflect this. modifyhelpargumentprocessingsothatseveralhelpargumentscanbespecifiedatatimechangetheusagetexttoreflectthis Fix concatenated help output; outputs from all help options are now represented. (3D help had been omitted in 0.7.2.) fixconcatenatedhelpoutputoutputsfromallhelpoptionsarenowrepresented3dhelphadbeenomittedin072 Add a check to ensure that at most one --q* option is specified. The issue of multiple --q* options being specified was raised on the ALE mailing list by Viktors Rotanovs. As there is currently no support for this, generating an error message is appropriate. addachecktoensurethatatmostoneqoptionisspecifiedtheissueofmultipleqoptionsbeingspecifiedwasraisedonthealemailinglistbyviktorsrotanovsasthereiscurrentlynosupportforthisgeneratinganerrormessageisappropriate Add cost-minimizing code to reconstruct 3D scenes from 2D inputs. (This code is currently very experimental.) addcostminimizingcodetoreconstruct3dscenesfrom2dinputsthiscodeiscurrentlyveryexperimental Add rudimentary device support for raw, linear files from the Canon EOS 300D (Digital Rebel) SLR. CRW files may not be directly usable under all configurations; in cases where they are not, Dave Coffin's dcraw program, with arguments -d -4, will produce a raw, linear PPM file. See http://www.cybercom.net/~dcoffin/dcraw/ addrudimentarydevicesupportforrawlinearfilesfromthecanoneos300ddigitalrebelslrcrwfilesmaynotbedirectlyusableunderallconfigurationsincaseswheretheyarenotdavecoffinsdcrawprogramwithargumentsd4willproducearawlinearppmfileseehttpwwwcybercomnetdcoffindcraw Add a new option --gs-mo to establish a minimum overlap area for global searches. This may allow more of Derrick Brashear's historical USGS contour map image sets to align successfully. (from 0.7.1-patch2) addanewoptiongsmotoestablishaminimumoverlapareaforglobalsearchesthismayallowmoreofderrickbrashearshistoricalusgscontourmapimagesetstoalignsuccessfullyfrom071patch2 Allow the scale factor to be explicitly set to one. (from 0.7.1-patch2) allowthescalefactortobeexplicitlysettoonefrom071patch2 Print version information to stdout instead of stderr. (from 0.7.1-patch2) printversioninformationtostdoutinsteadofstderrfrom071patch2 Add a rudimentary test suite. (from 0.7.1-patch2) addarudimentarytestsuitefrom071patch2 Add support for --perturb-{upper,lower}=x%, where the value x% is specified as a percentage of the smallest image dimension. Use of percentages to specify bounds was suggested by Jeff Epler. (from 0.7.1-patch1) addsupportforperturbupperlowerxwherethevaluexisspecifiedasapercentageofthesmallestimagedimensionuseofpercentagestospecifyboundswassuggestedbyjeffeplerfrom071patch1 In render::is_excluded(), add the offset before checking exclusion regions. (from 0.7.1-patch1) inrenderis_excludedaddtheoffsetbeforecheckingexclusionregionsfrom071patch1 Add code to shrink the accumulated image in d2/render/incremental.h, so that superfluously large undefined areas are never present. This may improve operation of '--gs inner' in some cases. (from 0.7.1-patch1) addcodetoshrinktheaccumulatedimageind2renderincrementalhsothatsuperfluouslylargeundefinedareasareneverpresentthismayimproveoperationofgsinnerinsomecasesfrom071patch1 In d2::align::_align(), rescale default_initial_alignment in parallel with the current transformation, so that it can be used again, if necessary. (from 0.7.1-patch1) ind2align_alignrescaledefault_initial_alignmentinparallelwiththecurrenttransformationsothatitcanbeusedagainifnecessaryfrom071patch1 Add experimental options --perturb-source and --perturb-output, which allow some refinement of the manner in which perturbation occurs. (from 0.7.1-patch1) addexperimentaloptionsperturbsourceandperturboutputwhichallowsomerefinementofthemannerinwhichperturbationoccursfrom071patch1 Fix --visp segfault when not using last: filters. fixvispsegfaultwhennotusinglastfilters Add help mode --hA to display all help pages. addhelpmodehatodisplayallhelppages Add circular point-spread function option "circle=<diameter>". addcircularpointspreadfunctionoptioncircleltdiameter Add support for the ov7620 sensor (raw, linear modes only). (Updated from 0.7.0-patch1 to specify a linear PSF.) addsupportfortheov7620sensorrawlinearmodesonlyupdatedfrom070patch1tospecifyalinearpsf Add global search option --gs to fix an alignment problem reported by Bert Douglas. (Also included in 0.7.0-patch1.) addglobalsearchoptiongstofixanalignmentproblemreportedbybertdouglasalsoincludedin070patch1 Change transformation::eu_{get,set,modify}() so that externally visible values are interpreted in the context of transformations between scaled images, while internal values represent transformations between unscaled images. (Bugfix for 0.7.0. Also included in 0.7.0-patch1.) changetransformationeu_getsetmodifysothatexternallyvisiblevaluesareinterpretedinthecontextoftransformationsbetweenscaledimageswhileinternalvaluesrepresenttransformationsbetweenunscaledimagesbugfixfor070alsoincludedin070patch1 d2/tfile.h: Ensure that eu[] parameters are properly scaled when read and written. (Bugfix for 0.7.0. Also included in 0.7.0-patch1.) d2tfilehensurethateuparametersareproperlyscaledwhenreadandwrittenbugfixfor070alsoincludedin070patch1 Fix order-of-operations bug in d2::image::scale_by_half(). (Bugfix for 0.7.0 and earlier versions. Also included in 0.7.0-patch1.) fixorderofoperationsbugind2imagescale_by_halfbugfixfor070andearlierversionsalsoincludedin070patch1 Scale alignment weights for reduced level-of-detail in d2::align(). (Also included in 0.7.0-patch1.) scalealignmentweightsforreducedlevelofdetailind2alignalsoincludedin070patch1 For reduced level-of-detail alignment reference images, filter using alignment weights. (Also included in 0.7.0-patch1.) forreducedlevelofdetailalignmentreferenceimagesfilterusingalignmentweightsalsoincludedin070patch1 Add speed optimizations for filtering in the Euclidean case, but leave these disabled, since they are not safe. (Also included in 0.7.0-patch1.) addspeedoptimizationsforfilteringintheeuclideancasebutleavethesedisabledsincetheyarenotsafealsoincludedin070patch1 Add support for algorithmic alignment weights. This requires POSIX fork() and execlp(), so add a Makefile variable for POSIX. addsupportforalgorithmicalignmentweightsthisrequiresposixforkandexeclpsoaddamakefilevariableforposix Add support for frequency-based alignment weights. Angelo Pesce had initially suggested the related (or more general) idea of edge-based alignment. Frequencies were chosen because of their conceptual simplicity. This option requires that FFTW be linked. addsupportforfrequencybasedalignmentweightsangelopescehadinitiallysuggestedtherelatedormoregeneralideaofedgebasedalignmentfrequencieswerechosenbecauseoftheirconceptualsimplicitythisoptionrequiresthatfftwbelinked Add support for specifying per-pixel and per-channel alignment weights by providing an additional weight-map image, as suggested by Bert Douglas. addsupportforspecifyingperpixelandperchannelalignmentweightsbyprovidinganadditionalweightmapimageassuggestedbybertdouglas Remove support for USM. removesupportforusm Add multiple default settings: q0, q1, q2, qn, qr. addmultipledefaultsettingsq0q1q2qnqr Partition help into sections, and add a section for transformation data file help. partitionhelpintosectionsandaddasectionfortransformationdatafilehelp Add a device type for the XVP610 camera in 640x480 mode. addadevicetypeforthexvp610camerain640x480mode Modify the divisor in d2/render/ipc.h to ensure convergence when using multiple varieties. modifythedivisorind2renderipchtoensureconvergencewhenusingmultiplevarieties Add experimental handling for Bayer patterns. addexperimentalhandlingforbayerpatterns Add experimental video stabilization options. addexperimentalvideostabilizationoptions Add options to control output range. By default, use the range of the original frame. addoptionstocontroloutputrangebydefaultusetherangeoftheoriginalframe For incremental rendering, add general filtering options. Drizzling options are no longer supported as such, but the help output offers examples of how to emulate old drizzling/merging techniques (roughly). forincrementalrenderingaddgeneralfilteringoptionsdrizzlingoptionsarenolongersupportedassuchbutthehelpoutputoffersexamplesofhowtoemulateolddrizzlingmergingtechniquesroughly Add options --fail-default and --fail-optimal to select the desired failure mode. --fail-default uses the default alignment in the case of failure. addoptionsfaildefaultandfailoptimaltoselectthedesiredfailuremodefaildefaultusesthedefaultalignmentinthecaseoffailure Add option --ex, to support exclusion volumes. Region exclusion was first suggested to the author by Dewayne VanHoozer as a means of solving the 'closed eye problem' in group photography. addoptionextosupportexclusionvolumesregionexclusionwasfirstsuggestedtotheauthorbydewaynevanhoozerasameansofsolvingtheclosedeyeproblemingroupphotography Add a barrel distortion adjustment multiplier and rate options. addabarreldistortionadjustmentmultiplierandrateoptions In d2/transformation.h, add parameters for barrel distortion correction. In d2/tfile.h, add new barrel distortion command 'B'. The approach taken is based on that of Helmut Dersch's PanoTools. (i.e., a polynomial in radial distance is used.) ind2transformationhaddparametersforbarreldistortioncorrectionind2tfilehaddnewbarreldistortioncommandbtheapproachtakenisbasedonthatofhelmutderschspanotoolsieapolynomialinradialdistanceisused Increment the latest supported transformation file syntax to version 3. This version supports transformation of the original frame, as well as other new features described above. incrementthelatestsupportedtransformationfilesyntaxtoversion3thisversionsupportstransformationoftheoriginalframeaswellasothernewfeaturesdescribedabove Move d2/gpt.h to d2/transformation.h. moved2gpthtod2transformationh In d2::align, add support for original frame transformations. ind2alignaddsupportfororiginalframetransformations In d2::align::diff() and d2::align::set_exposure_ratio(), treat cases with and without extension identically. ind2aligndiffandd2alignset_exposure_ratiotreatcaseswithandwithoutextensionidentically Report unrecognized transformation file commands as errors instead of warnings. reportunrecognizedtransformationfilecommandsaserrorsinsteadofwarnings In the transformation data file handler, report incompatible transformation types as an error instead of as a warning. inthetransformationdatafilehandlerreportincompatibletransformationtypesasanerrorinsteadofasawarning Add a generalized, but rudimentary, implementation of Steve Mann's notion of 'certainty'. For more details, see http://wearcam.org/comparametrics.pdf addageneralizedbutrudimentaryimplementationofstevemannsnotionofcertaintyformoredetailsseehttpwearcamorgcomparametricspdf Make stdin filter height and width independent of each other. makestdinfilterheightandwidthindependentofeachother In the Irani-Peleg renderer, skip frames that fail to reach the match threshold. intheiranipelegrendererskipframesthatfailtoreachthematchthreshold Convert some operations on pixels and points into vector syntax through C++ operator overloading. convertsomeoperationsonpixelsandpointsintovectorsyntaxthroughcoperatoroverloading Add command-line options to select plain or raw PNM/PPM formats. Remove makefile variable PLAIN. addcommandlineoptionstoselectplainorrawpnmppmformatsremovemakefilevariableplain Add command-line options to select 8/16 bits per channel. Remove makefile variable BITS. addcommandlineoptionstoselect816bitsperchannelremovemakefilevariablebits Revise the device configuration xvp610_320x240 to use a new filter, reflecting driver updates (see the relevant web page http://auricle.dyndns.org/xvp610/ ) and support for non-linear colorspace point-spread functions. revisethedeviceconfigurationxvp610_320x240touseanewfilterreflectingdriverupdatesseetherelevantwebpagehttpauricledyndnsorgxvp610andsupportfornonlinearcolorspacepointspreadfunctions In the Irani-Peleg renderer, use a discrete Fourier transform to ensure that each (point-spread function, backprojection kernel) pair satisfies condition (9) from theorem 4.1 in the source paper. intheiranipelegrendereruseadiscretefouriertransformtoensurethateachpointspreadfunctionbackprojectionkernelpairsatisfiescondition9fromtheorem41inthesourcepaper Add a point-spread function rasterizer. addapointspreadfunctionrasterizer Extend the --replace option to support drizzling. extendthereplaceoptiontosupportdrizzling Add support for exposure registration (i.e., matching of exposure between different frames). addsupportforexposureregistrationiematchingofexposurebetweendifferentframes Change -Os to -O2 in the Makefile, since -Os no longer achieves speedup in the most critical codepaths. changeostoo2inthemakefilesinceosnolongerachievesspeedupinthemostcriticalcodepaths Add command-line support for summation of point-spread functions. addcommandlinesupportforsummationofpointspreadfunctions Add a polymorphic point-spread function type psf and convert all external interfaces of ipc.h and usm.h (formerly hf-enhance.h) to use this type. addapolymorphicpointspreadfunctiontypepsfandconvertallexternalinterfacesofipchandusmhformerlyhfenhancehtousethistype Fix memory leak in d2/render/combine.h:get_image(). (This fix is also included in a patch for 0.5.1.) fixmemoryleakind2rendercombinehget_imagethisfixisalsoincludedinapatchfor051 Modify the USM renderer to write output when incremental output is enabled. modifytheusmrenderertowriteoutputwhenincrementaloutputisenabled In the USM renderer, now only defined pixel values contribute to the mask. Also, undefined values are no longer masked. intheusmrenderernowonlydefinedpixelvaluescontributetothemaskalsoundefinedvaluesarenolongermasked Update e-mail address information. updateemailaddressinformation Modify the Irani-Peleg calibration script into a general point-spread function calibration script, using a new built-in point-spread function evaluation module to rate candidates. modifytheiranipelegcalibrationscriptintoageneralpointspreadfunctioncalibrationscriptusinganewbuiltinpointspreadfunctionevaluationmoduletoratecandidates Irani-Peleg and USM (High-frequency enhancement) renderers now use the same point-spread function configurations. New options --ips, --usm, --lpsf, --nlpsf, and --device subsume and extend the functionality provided by options --ip, --ipc, and --hf-enhance. iranipelegandusmhighfrequencyenhancementrenderersnowusethesamepointspreadfunctionconfigurationsnewoptionsipsusmlpsfnlpsfanddevicesubsumeandextendthefunctionalityprovidedbyoptionsipipcandhfenhance Add support for convolutions in non-linear colorspace. This feature is enabled and configured by the command-line option --nlpsf. (See also the item above.) addsupportforconvolutionsinnonlinearcolorspacethisfeatureisenabledandconfiguredbythecommandlineoptionnlpsfseealsotheitemabove Linearize channel values within internal data structures so that most ALE operations are performed on linear data. Steve Mann discusses the use of linear representations in image processing, e.g. in his paper http://wearcam.org/comparametrics.pdf . We assume a simple power-law response by default. linearizechannelvalueswithininternaldatastructuressothatmostaleoperationsareperformedonlineardatastevemanndiscussestheuseoflinearrepresentationsinimageprocessingeginhispaperhttpwearcamorgcomparametricspdfweassumeasimplepowerlawresponsebydefault Modify the image class to use a floating-point data type for storing pixels. modifytheimageclasstouseafloatingpointdatatypeforstoringpixels Modify the README to remove information covered in the User Manual. modifythereadmetoremoveinformationcoveredintheusermanual Revise identifiers and comments in d2/render/ipc.h to better reflect the terminology used in the source paper by Irani and Peleg. reviseidentifiersandcommentsind2renderipchtobetterreflecttheterminologyusedinthesourcepaperbyiraniandpeleg Consoldiate code for computing the position and dimensions of a pixel in a new coordinate system, and use this new abstraction to reduce the code size of d2/render/ipc.h and d2/render/drizzle.h (Irani-Peleg and drizzling code, respectively). consoldiatecodeforcomputingthepositionanddimensionsofapixelinanewcoordinatesystemandusethisnewabstractiontoreducethecodesizeofd2renderipchandd2renderdrizzlehiranipeleganddrizzlingcoderespectively Change several instances of 'double', 'float', and 'my_real' to specialized floating-point types 'ale_real', 'ale_pos', 'ale_sreal', and 'ale_accum'. changeseveralinstancesofdoublefloatandmy_realtospecializedfloatingpointtypesale_realale_posale_srealandale_accum Fix offset calculation in d2/render/ipc.h. This is necessary for Irani-Peleg rendering of image mosaics extending upwards or to the left of the original frame. (This fix is also included in a patch for 0.5.1.) fixoffsetcalculationind2renderipchthisisnecessaryforiranipelegrenderingofimagemosaicsextendingupwardsortotheleftoftheoriginalframethisfixisalsoincludedinapatchfor051 Move classes treating snapshots as two-dimensional data to directory 'd2' and create an associated C++ namespace. We can't use '2d' to label the namespace, because the C++ grammar won't allow it. moveclassestreatingsnapshotsastwodimensionaldatatodirectoryd2andcreateanassociatedcnamespacewecantuse2dtolabelthenamespacebecausethecgrammarwontallowit Several of the changes below are based on a suggestion by Bert Douglas regarding support for 16-bit-per-channel color. See the README for more information about relevant compilation options. severalofthechangesbelowarebasedonasuggestionbybertdouglasregardingsupportfor16bitperchannelcolorseethereadmeformoreinformationaboutrelevantcompilationoptions Add information to the README regarding new compilation options. addinformationtothereadmeregardingnewcompilationoptions Modify the makefile to accept a variable BITS, and differentiate between values BITS=8 and BITS=16. The latter option causes the macro BITS_16 to be defined during compilation. modifythemakefiletoacceptavariablebitsanddifferentiatebetweenvaluesbits8andbits16thelatteroptioncausesthemacrobits_16tobedefinedduringcompilation Modify image_rw.h to handle 16-bit data when BITS_16 is defined. Also, differentiate between 8-bit and 16-bit ImageMagick builds by checking MaxRGB. modifyimage_rwhtohandle16bitdatawhenbits_16isdefinedalsodifferentiatebetween8bitand16bitimagemagickbuildsbycheckingmaxrgb In ppm.h, add carriage returns to the set of recognized whitespace characters. inppmhaddcarriagereturnstothesetofrecognizedwhitespacecharacters Modify ppm.h to read 16-bit binary PPM files (added to the PPM format spec in April 2000). modifyppmhtoread16bitbinaryppmfilesaddedtotheppmformatspecinapril2000 Modify ppm.h to read plain (ASCII) as well as raw (binary) PPM files. modifyppmhtoreadplainasciiaswellasrawbinaryppmfiles Add a Makefile option for writing plain (ASCII) PPM files instead of raw (binary). This option causes the macro PPM_PLAIN to be defined during compilation. addamakefileoptionforwritingplainasciippmfilesinsteadofrawbinarythisoptioncausesthemacroppm_plaintobedefinedduringcompilation Modify ppm.h to write plain (ASCII) PPM files when PPM_PLAIN is defined. modifyppmhtowriteplainasciippmfileswhenppm_plainisdefined Modify ppm.h to output 16-bit PPM files when BITS_16 is defined. modifyppmhtooutput16bitppmfileswhenbits_16isdefined Modify ppm.h to scale input intensity values based on the internal representation depth (8 or 16 bits per channel). modifyppmhtoscaleinputintensityvaluesbasedontheinternalrepresentationdepth8or16bitsperchannel Add a file 'channel.h' to describe the color channel data type and valid range, both being dependent on whether BITS_16 is defined. Use these generic values, where appropriate, throughout the ALE codebase. addafilechannelhtodescribethecolorchanneldatatypeandvalidrangebothbeingdependentonwhetherbits_16isdefinedusethesegenericvalueswhereappropriatethroughoutthealecodebase Remove certain cloning operations from align.h, but since cursory tests indicate that scaling with --scale is much more expensive than cloning, allow cloning to occur when scaling occurs. removecertaincloningoperationsfromalignhbutsincecursorytestsindicatethatscalingwithscaleismuchmoreexpensivethancloningallowcloningtooccurwhenscalingoccurs Add more comment documentation to header files. addmorecommentdocumentationtoheaderfiles Emit a more informative error message when the PPM file handler encounters a file that is not a well-formed PPM binary file. emitamoreinformativeerrormessagewhentheppmfilehandlerencountersafilethatisnotawellformedppmbinaryfile Move rendering implementations to subdirectory 'render/'. moverenderingimplementationstosubdirectoryrender Modify semantics of alignment following by applying to file-loaded initial transformations a delta transformation D = AB^-1, where B is the previous frame's (unmodified) initial transformation, A is the previous frame's final transformation, and ^-1 is the inverse operator. Using --follow with --trans-load can now improve alignment success when working with panoramic image mosaics. modifysemanticsofalignmentfollowingbyapplyingtofileloadedinitialtransformationsadeltatransformationdab1wherebisthepreviousframesunmodifiedinitialtransformationaisthepreviousframesfinaltransformationand1istheinverseoperatorusingfollowwithtransloadcannowimprovealignmentsuccesswhenworkingwithpanoramicimagemosaics We're not using simulated annealing, so remove comments that claim otherwise. werenotusingsimulatedannealingsoremovecommentsthatclaimotherwise Remove certain unsafe assumptions from ipc/* (now render/ipc/*); this change includes a modification to ipc.h (now render/ipc.h). Limits of the rectangle used as an argument to the <type>::response() function are now explicitly given rather than implied. removecertainunsafeassumptionsfromipcnowrenderipcthischangeincludesamodificationtoipchnowrenderipchlimitsoftherectangleusedasanargumenttothelttyperesponsefunctionarenowexplicitlygivenratherthanimplied Change documentation for --replace. changedocumentationforreplace Modify Irani-Peleg renderer to produce incremental output. modifyiranipelegrenderertoproduceincrementaloutput Modify Monte Carlo alignment so that the same set of accumulated image pixels is examined when comparing two transformations. modifymontecarloalignmentsothatthesamesetofaccumulatedimagepixelsisexaminedwhencomparingtwotransformations Add an option for additional upper-bound constraint of rotational perturbation. Jeff Epler had noted that the perturb-upper/perturb-lower options alone may not be suited to working with sets of higher-resolution images. addanoptionforadditionalupperboundconstraintofrotationalperturbationjeffeplerhadnotedthattheperturbupperperturbloweroptionsalonemaynotbesuitedtoworkingwithsetsofhigherresolutionimages Resolve a bug introduced in version 0.1.1 which had limited rotational perturbation to 2 degrees. resolveabugintroducedinversion011whichhadlimitedrotationalperturbationto2degrees Add an option to adjust the maximum level of detail used. The default maximum is 2/perturb, which matches the default for previous versions of ALE. addanoptiontoadjustthemaximumlevelofdetailusedthedefaultmaximumis2perturbwhichmatchesthedefaultforpreviousversionsofale Modify names of temporary files used in the calibration script. modifynamesoftemporaryfilesusedinthecalibrationscript Add a replacement option suggested by Jeff Treece. This option can be used to facilitate video stabilization. addareplacementoptionsuggestedbyjefftreecethisoptioncanbeusedtofacilitatevideostabilization Irani-Peleg: add support for configurable modules, including a module that reads its configuration data from standard input and a module calibrated for an IBM (Xirlink) XVP610 in 320x240 mode. A rudimentary script for calibrating devices with unknown projection functions has been included as ipc/ale-calibrate. iranipelegaddsupportforconfigurablemodulesincludingamodulethatreadsitsconfigurationdatafromstandardinputandamodulecalibratedforanibmxirlinkxvp610in320x240modearudimentaryscriptforcalibratingdeviceswithunknownprojectionfunctionshasbeenincludedasipcalecalibrate Irani-Peleg: don't truncate correction values in backprojection. iranipelegdonttruncatecorrectionvaluesinbackprojection Irani-Peleg: don't multiply the weight function by a scale correction factor in backprojection. iranipelegdontmultiplytheweightfunctionbyascalecorrectionfactorinbackprojection Rename render::operator()() to render::sync(). Update subclasses accordingly. renamerenderoperatortorendersyncupdatesubclassesaccordingly Allow --ip and --hf-enhance to be used together. [Modify ip::operator() and hf_filter::operator() so that multiple post-processing filters can be used.] allowipandhfenhancetobeusedtogethermodifyipoperatorandhf_filteroperatorsothatmultiplepostprocessingfilterscanbeused Initialize the drizzled image to be uniformly black. This fixes a bug introduced in 0.4.2. initializethedrizzledimagetobeuniformlyblackthisfixesabugintroducedin042 Allocate the correct size image for drizzling. This fixes a bug introduced in 0.4.5. allocatethecorrectsizeimagefordrizzlingthisfixesabugintroducedin045 Ensure correct transformation scaling and difference calculation after alignment is complete, even if alignment terminates with a reduced level of detail (i.e. perturb-lower > 2). ensurecorrecttransformationscalinganddifferencecalculationafteralignmentiscompleteevenifalignmentterminateswithareducedlevelofdetailieperturblower2 Separate the scale() function into two cases: scale() is reserved for scale factors greater than or equal to one, as in user-specified scaling; and scale_by_half() is used for the scale factor 0.5, needed to provide multiple levels of detail in alignment. Modify the scale_by_half() case to reflect source pixel values more fairly. (This change affects alignment behavior at reduced levels of detail.) separatethescalefunctionintotwocasesscaleisreservedforscalefactorsgreaterthanorequaltooneasinuserspecifiedscalingandscale_by_halfisusedforthescalefactor05neededtoprovidemultiplelevelsofdetailinalignmentmodifythescale_by_halfcasetoreflectsourcepixelvaluesmorefairlythischangeaffectsalignmentbehavioratreducedlevelsofdetail Reduce whitespace in usage() message. reducewhitespaceinusagemessage Modify align::diff() to use correctly scaled image offset values. (Bugfix for alignment with --extend.) modifyaligndifftousecorrectlyscaledimageoffsetvaluesbugfixforalignmentwithextend Modify align.h so that the image definition array is correctly scaled for all levels of detail. (Bugfix for alignment with --extend.) modifyalignhsothattheimagedefinitionarrayiscorrectlyscaledforalllevelsofdetailbugfixforalignmentwithextend Modify image.h to correctly handle image offset values. (Bugfix for --extend operation.) modifyimagehtocorrectlyhandleimageoffsetvaluesbugfixforextendoperation Remove call to stat() in image_rw.h. This improves OS independence, and apparently also allows URL-specification of images when compiled with ImageMagick support. removecalltostatinimage_rwhthisimprovesosindependenceandapparentlyalsoallowsurlspecificationofimageswhencompiledwithimagemagicksupport Modify image file handler interface so that input files are not scaled. Perform scaling, when necessary, outside of the file handler. Since unscaled data is needed by the drizzling and Irani-Peleg code, this fixes bugs in those modules. modifyimagefilehandlerinterfacesothatinputfilesarenotscaledperformscalingwhennecessaryoutsideofthefilehandlersinceunscaleddataisneededbythedrizzlingandiranipelegcodethisfixesbugsinthosemodules Modify the Monte Carlo pixel selection algorithm so that the expected number of sampled pixels more closely matches the specified number in typical cases. modifythemontecarlopixelselectionalgorithmsothattheexpectednumberofsampledpixelsmorecloselymatchesthespecifiednumberintypicalcases Specify the binary mode flag to fopen() calls in the PPM file handler. This change resolves a bug discovered by Benjamin Hill. specifythebinarymodeflagtofopencallsintheppmfilehandlerthischangeresolvesabugdiscoveredbybenjaminhill Add support for Monte Carlo alignment of images, in which only a random subset of pixels is sampled. addsupportformontecarloalignmentofimagesinwhichonlyarandomsubsetofpixelsissampled Add an option to disable incremental image output. addanoptiontodisableincrementalimageoutput Implement an image reconstruction option based on the work of Irani and Peleg. implementanimagereconstructionoptionbasedontheworkofiraniandpeleg Clean up source; move rendering and alignment functions into separate files. cleanupsourcemoverenderingandalignmentfunctionsintoseparatefiles Change valid drizzling diameter interval to (0,1]. changevaliddrizzlingdiameterintervalto01 Modify PPM file reader to correctly handle comments in PPM files; this resolves a bug pointed out by Benjamin Hill. modifyppmfilereadertocorrectlyhandlecommentsinppmfilesthisresolvesabugpointedoutbybenjaminhill Add missing typecast to resolve compile warning under GCC 3.2. addmissingtypecasttoresolvecompilewarningundergcc32 Make changes to gpt.h that may reduce the Euclidean alignment time. makechangestogpththatmayreducetheeuclideanalignmenttime Move ale.c to ale.cc to follow one of the many C++ naming conventions. movealectoalecctofollowoneofthemanycnamingconventions Change language to C++. changelanguagetoc Code cleanup in ale.c, image.h, and gpt.h. codecleanupinalecimagehandgpth Separate into a number of subsections the option descriptions in the README separateintoanumberofsubsectionstheoptiondescriptionsinthereadme Add URL information to README addurlinformationtoreadme Add an experimental drizzling implementation. Research on drizzling by Richard Hook and Andrew Fruchter was brought to the attention of the author by Dan Kaminsky. addanexperimentaldrizzlingimplementationresearchondrizzlingbyrichardhookandandrewfruchterwasbroughttotheattentionoftheauthorbydankaminsky Add an option to use the previous frame's final transformation as the default alignment. addanoptiontousethepreviousframesfinaltransformationasthedefaultalignment Change pixel weight data type so that more than 255 images can be merged. changepixelweightdatatypesothatmorethan255imagescanbemerged Add support for increased spatial extents. Research on increased spatial extents by Steve Mann was brought to the attention of the author by Dan Egnor. addsupportforincreasedspatialextentsresearchonincreasedspatialextentsbystevemannwasbroughttotheattentionoftheauthorbydanegnor Modify the transformation algorithm to use transformations from the domain of the input image to the range of the target image. This change is reflected in transformation files. Maintain support for old transformation file versions, however. modifythetransformationalgorithmtousetransformationsfromthedomainoftheinputimagetotherangeofthetargetimagethischangeisreflectedintransformationfilesmaintainsupportforoldtransformationfileversionshowever Add version information to transformation files and update the version from 0 to 2. addversioninformationtotransformationfilesandupdatetheversionfrom0to2 Merge a bugfix from Debian ALE package version 0.4.0-1. Without this fix, an assertion failure can occur when ImageMagick support is enabled. Original fix implemented by Nick Rusnov. mergeabugfixfromdebianalepackageversion0401withoutthisfixanassertionfailurecanoccurwhenimagemagicksupportisenabledoriginalfiximplementedbynickrusnov Add support for general scaling parameters (i.e. all scale factors >= 1.0). --scale2, --scale4, and --scale8 are now deprecated, and replaced with a more general --scale=x argument. addsupportforgeneralscalingparametersieallscalefactors10scale2scale4andscale8arenowdeprecatedandreplacedwithamoregeneralscalexargument Support enhancement of high frequencies even when the scale factor is 1.0. supportenhancementofhighfrequenciesevenwhenthescalefactoris10 Modify the high-frequency filter algorithm to support filtering near the border of an image. modifythehighfrequencyfilteralgorithmtosupportfilteringneartheborderofanimage Modify the high-frequency filter function so that the response is now (4/n)^2 times what it used to be, where n is the scale factor. modifythehighfrequencyfilterfunctionsothattheresponseisnow4n2timeswhatitusedtobewherenisthescalefactor Don't filter high frequencies if we're not enhancing them. This improves efficiency, but should not affect output. dontfilterhighfrequenciesifwerenotenhancingthemthisimprovesefficiencybutshouldnotaffectoutput Output average match statistic. outputaveragematchstatistic Update informational output to transformation files to include original frame. updateinformationaloutputtotransformationfilestoincludeoriginalframe Add support for post-enhancement of high-frequency details. addsupportforpostenhancementofhighfrequencydetails Add support for loading and saving transformation data. addsupportforloadingandsavingtransformationdata Add an option to set the upper bound on correction steps. addanoptiontosettheupperboundoncorrectionsteps Modify Makefile to compile with size optimization, since this appears to improve speed characteristics in some cases. modifymakefiletocompilewithsizeoptimizationsincethisappearstoimprovespeedcharacteristicsinsomecases Move transformation data structure and related functions to a separate header file. movetransformationdatastructureandrelatedfunctionstoaseparateheaderfile Add support for general projective transformations, and change/add options as follows: '--translation' used to be '--no-rotate' '--euclidean' used to be '--rotate' '--projective' is a new option addsupportforgeneralprojectivetransformationsandchangeaddoptionsasfollowstranslationusedtobenorotateeuclideanusedtoberotateprojectiveisanewoption Add optional support for .jpg, .png, .tiff, and other file formats through ImageMagick. Translation using ImageMagick was suggested by Nick Rusnov. addoptionalsupportforjpgpngtiffandotherfileformatsthroughimagemagicktranslationusingimagemagickwassuggestedbynickrusnov Don't segfault if a file can't be opened. dontsegfaultifafilecantbeopened Use reduced levels of detail in coarser alignment steps to increase speed. usereducedlevelsofdetailincoarseralignmentstepstoincreasespeed Change perturbation step lower-bound check from less-than ('<') to less-than-or-equal-to ('<='). Change default lower bound to .125 from .1 (the behavior is the same, but the value makes more sense). changeperturbationsteplowerboundcheckfromlessthanlttolessthanorequaltoltchangedefaultlowerboundto125from1thebehavioristhesamebutthevaluemakesmoresense Change perturbation initial value to 32 pixels from 16 pixels, since coarse alignment is now less expensive. changeperturbationinitialvalueto32pixelsfrom16pixelssincecoarsealignmentisnowlessexpensive Modify scale function so that the borders aren't corrupted (too badly). modifyscalefunctionsothatthebordersarentcorruptedtoobadly Add support for correction of rotation about the lens axis. addsupportforcorrectionofrotationaboutthelensaxis Add an optional match criterion for merging. addanoptionalmatchcriterionformerging Add an option to adjust minimum step-size. addanoptiontoadjustminimumstepsize Add flags to specify which channels to use for alignment. Use a summation of all channels by default. addflagstospecifywhichchannelstouseforalignmentuseasummationofallchannelsbydefault Add an option to modify the error metric exponent, and change the default value from 1 to 2. addanoptiontomodifytheerrormetricexponentandchangethedefaultvaluefrom1to2 Display information about how well a new image matches the accumulated image. displayinformationabouthowwellanewimagematchestheaccumulatedimage Add a rule for ale.exe to the Makefile. addaruleforaleexetothemakefile Initial release. initialrelease