World Library  
Flag as Inappropriate
Email this Article

Computer-generated holography

Article Id: WHEBN0009596720
Reproduction Date:

Title: Computer-generated holography  
Author: World Heritage Encyclopedia
Language: English
Subject: Holography, Holographic display, Thick-film dielectric electroluminescent technology, Telescopic pixel display, Time-multiplexed optical shutter
Collection: Holography
Publisher: World Heritage Encyclopedia
Publication
Date:
 

Computer-generated holography

Computer Generated Holography (CGH) is the method of digitally generating holographic interference patterns. A holographic image can be generated e.g. by digitally computing a holographic interference pattern and printing it onto a mask or film for subsequent illumination by suitable coherent light source.
Alternatively, the holographic image can be brought to life by a holographic 3D display (a display which operates on the basis of interference of coherent light), bypassing the need of having to fabricate a "hardcopy" of the holographic interference pattern each time. Consequently, in recent times the term "computer generated holography" is increasingly being used to denote the whole process chain of synthetically preparing holographic light wavefronts suitable for observation.[1][2]

Computer generated holograms have the advantage that the objects which one wants to show do not have to possess any physical reality at all (completely synthetic hologram generation). On the other hand, if holographic data of existing objects is generated optically, but digitally recorded and processed, and brought to display subsequently, this is termed CGH as well. Ultimately, computer generated holography might serve all the roles of current computer generated imagery: holographic computer displays for a wide range of applications from CAD to gaming, holographic video and TV programs, automotive and communication applications (cell phone displays) and many more.

Contents

  • Overview 1
  • Wavefront computation 2
    • Fourier transform method 2.1
    • Point Source Holograms 2.2
  • Interference pattern encoding 3
  • Reconstruction 4
  • Available CGH devices 5
  • References 6

Overview

Holography is a technique originally invented by Hungarian physicist Dennis Gabor (1900-1979) to improve the resolving power on electron microscopes. An object is illuminated with a coherent (usually monochromatic) light beam; the scattered light is brought to interference with a reference beam of the same source, recording the interference pattern. CGH as defined in the introduction has broadly three tasks:

  1. Computation of the virtual scattered wavefront
  2. Encoding the wavefront data, preparing it for display
  3. Reconstruction: Modulating the interference pattern onto a coherent light beam by technological means, to transport it to the user observing the hologram.

Note that it is not always justified to make a strict distinction between these steps; however it helps the discussion to structure it in this way.

Wavefront computation

Computer generated holograms offer important advantages over the optical holograms since there is no need for a real object. Because of this breakthrough, a three-dimensional display was expected when the first algorithms were reported at 1966.[3]

Unfortunately, the researchers soon realized that there are noticeable lower and upper bounds in terms of computational speed and image quality and fidelity respectively. Wavefront calculations are computationally very intensive; even with modern mathematical techniques and high-end computing equipment, real-time computation is tricky. There are many different methods for calculating the interference pattern for a CGH. In the following 25 years a lot of methods for CGHs[4][5][6][7][8][9] were proposed in the fields of holographic information and computational reduction as well as in computational and quantization techniques. In the field of computational techniques the reported algorithms can be categorized in two main concepts.

Fourier transform method

In the first one the Fourier transformation is used to simulate the propagation of each plane of depth of the object to the hologram plane. The Fourier transformation concept was first introduced by Brown and Lohmann[3] with the detour phase method leading to cell oriented holograms. A coding technique suggested by Burch[10] replaced the cell oriented holograms by point holograms and made this kind of computer generated holograms more attractive. In a Fourier Transform hologram the reconstruction of the image occurs in the far field. This is usually achieved by using the Fourier transforming properties of a positive lens for reconstruction. So there are two steps in this process: computing the light field in the far observer plane, and then Fourier transforming this field back to the lens plane. These holograms are called Fourier Based Holograms. First CGHs based on the Fourier transform could reconstruct only 2D images. Brown and Lohmann[11] introduced a technique to calculate computer generated holograms of 3D objects. Calculation of the light propagation from three-dimensional objects is performed according to the usual parabolic approximation to the Fresnel-Kirchhoff diffraction integral. The wavefront to be reconstructed by the hologram is, therefore, the superposition of the Fourier transforms of each object plane in depth, modified by a quadratic phase factor.

Point Source Holograms

The second computational strategy is based on the point source concept, where the object is broken down in self-luminous points. An elementary hologram is calculated for every point source and the final hologram is synthesized by superimposing all the elementary holograms. This concept has been first reported by Waters[12] whose major assumption originated with Rogers[13] who recognized that a Fresnel zone plate could be considered a special case of the hologram proposed by Gabor. But, as far as most of the object points were non-zero the computational complexity of the point-source concept was much higher than in the Fourier
transformation concept. Some researchers tried to overcome this drawback by predefining and storing all the possible elementary holograms using special data storage techniques[14] because of the huge capacity that is needed in this case, others by using special hardware.[15]

In the point-source concept the major problem that has to be circumvented is the trade-off between data storage capacity and computational speed. In particular, algorithms that raise the computational speed usually need very high data storage capabilities,[14] while on the other hand algorithms that lower the data storage requirement lead to high computational complexity,[16][17][18] though some optimizations could be achieved.[19] Another concept which leads to Point Source CGHs is the Ray tracing method. Ray tracing is perhaps the simplest method of computer generated holography to visualize. Essentially, the path length difference between the distance a virtual "reference beam" and a virtual "object beam" have to travel is calculated; this will give the relative phase of the scattered object beam.

Over the last three decades both concepts have made a remarkable progress improving computational speed and image quality. However, some technical restraints like computation and storage capacity still burden digital holography, making potential real-time applications with current standard computer hardware almost impossible.

Interference pattern encoding

Once it is known what the scattered wavefront of the object looks like or how it may be computed, it must be fixed on a spatial light modulator (SLM), abusing this term to include not only LCD displays or similar devices, but also films and masks. Basically, there are different types of SLMs available: Pure phase modulators (retarding the illuminating wave), pure amplitude modulators (blocking the illumination light), polarization modulators (influencing the polarization state of light)[20] and SLMs which have the capability of combined phase/amplitude modulation.[21]

In the case of pure phase or amplitude modulation, clearly quality losses are unavoidable. Early forms of pure amplitude holograms were simply printed in black and white, meaning that the amplitude had to be encoded with one bit of depth only.[3] Similarly, the kinoform is a pure-phase encoding invented at IBM in the early days of CGH.[22]

Even if a fully complex phase/amplitude modulation would be ideal, a pure phase or pure amplitude solution is normally preferred because it is much easier to implement technologically. Nevertheless, for the creation of complicated light distribution simultaneous modulation of amplitude and phase is reasonable. So far two different approaches for amplitude-phase-modulation have been implemented. One is based on phase-only or amplitude-only modulation and consecutive spatial filtering,[23] the other one is based on polarization holograms with variable orientation and magnitude of local birefringence.[24]

Reconstruction

The third (technical) issue is beam modulation and actual wavefront reconstruction. Masks may be printed, resulting often in a grained pattern structure since most printers can make only dots (although very small ones). Films may be developed by laser exposure. Holographic displays are currently yet a challenge (as of 2008), although successful prototypes have been built. An ideal display for computer generated holograms would consist of pixels smaller than a wavelength of light with adjustable phase and brightness. Such displays have been called phased array optics.[25] Further progress in nanotechnology is required to build them.

Available CGH devices

Currently, several companies and university departments are researching on the field of CGH devices:

  • MIT Media Lab[26] has developed the "Holovideo" CGH display
  • SeeReal Technologies have prototyped a CGH display
  • Cortical Cafe CGH Kit[27] is a CGH related hobbyist site with instructions, source code, and a web-application for CGH creation.

References


-- Module:Hatnote -- -- -- -- This module produces hatnote links and links to related articles. It -- -- implements the and meta-templates and includes -- -- helper functions for other Lua hatnote modules. --


local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local mArguments -- lazily initialise Module:Arguments local yesno -- lazily initialise Module:Yesno

local p = {}


-- Helper functions


local function getArgs(frame) -- Fetches the arguments from the parent frame. Whitespace is trimmed and -- blanks are removed. mArguments = require('Module:Arguments') return mArguments.getArgs(frame, {parentOnly = true}) end

local function removeInitialColon(s) -- Removes the initial colon from a string, if present. return s:match('^:?(.*)') end

function p.findNamespaceId(link, removeColon) -- Finds the namespace id (namespace number) of a link or a pagename. This -- function will not work if the link is enclosed in double brackets. Colons -- are trimmed from the start of the link by default. To skip colon -- trimming, set the removeColon parameter to true. checkType('findNamespaceId', 1, link, 'string') checkType('findNamespaceId', 2, removeColon, 'boolean', true) if removeColon ~= false then link = removeInitialColon(link) end local namespace = link:match('^(.-):') if namespace then local nsTable = mw.site.namespaces[namespace] if nsTable then return nsTable.id end end return 0 end

function p.formatPages(...) -- Formats a list of pages using formatLink and returns it as an array. Nil -- values are not allowed. local pages = {...} local ret = {} for i, page in ipairs(pages) do ret[i] = p._formatLink(page) end return ret end

function p.formatPageTables(...) -- Takes a list of page/display tables and returns it as a list of -- formatted links. Nil values are not allowed. local pages = {...} local links = {} for i, t in ipairs(pages) do checkType('formatPageTables', i, t, 'table') local link = t[1] local display = t[2] links[i] = p._formatLink(link, display) end return links end

function p.makeWikitextError(msg, helpLink, addTrackingCategory) -- Formats an error message to be returned to wikitext. If -- addTrackingCategory is not false after being returned from -- Module:Yesno, and if we are not on a talk page, a tracking category -- is added. checkType('makeWikitextError', 1, msg, 'string') checkType('makeWikitextError', 2, helpLink, 'string', true) yesno = require('Module:Yesno') local title = mw.title.getCurrentTitle() -- Make the help link text. local helpText if helpLink then helpText = ' (help)' else helpText = end -- Make the category text. local category if not title.isTalkPage and yesno(addTrackingCategory) ~= false then category = 'Hatnote templates with errors' category = string.format( '%s:%s', mw.site.namespaces[14].name, category ) else category = end return string.format( '%s', msg, helpText, category ) end


-- Format link -- -- Makes a wikilink from the given link and display values. Links are escaped -- with colons if necessary, and links to sections are detected and displayed -- with " § " as a separator rather than the standard MediaWiki "#". Used in -- the template.


function p.formatLink(frame) local args = getArgs(frame) local link = args[1] local display = args[2] if not link then return p.makeWikitextError( 'no link specified', 'Template:Format hatnote link#Errors', args.category ) end return p._formatLink(link, display) end

function p._formatLink(link, display) -- Find whether we need to use the colon trick or not. We need to use the -- colon trick for categories and files, as otherwise category links -- categorise the page and file links display the file. checkType('_formatLink', 1, link, 'string') checkType('_formatLink', 2, display, 'string', true) link = removeInitialColon(link) local namespace = p.findNamespaceId(link, false) local colon if namespace == 6 or namespace == 14 then colon = ':' else colon = end -- Find whether a faux display value has been added with the | magic -- word. if not display then local prePipe, postPipe = link:match('^(.-)|(.*)$') link = prePipe or link display = postPipe end -- Find the display value. if not display then local page, section = link:match('^(.-)#(.*)$') if page then display = page .. ' § ' .. section end end -- Assemble the link. if display then return string.format('%s', colon, link, display) else return string.format('%s%s', colon, link) end end


-- Hatnote -- -- Produces standard hatnote text. Implements the template.


function p.hatnote(frame) local args = getArgs(frame) local s = args[1] local options = {} if not s then return p.makeWikitextError( 'no text specified', 'Template:Hatnote#Errors', args.category ) end options.extraclasses = args.extraclasses options.selfref = args.selfref return p._hatnote(s, options) end

function p._hatnote(s, options) checkType('_hatnote', 1, s, 'string') checkType('_hatnote', 2, options, 'table', true) local classes = {'hatnote'} local extraclasses = options.extraclasses local selfref = options.selfref if type(extraclasses) == 'string' then classes[#classes + 1] = extraclasses end if selfref then classes[#classes + 1] = 'selfref' end return string.format( '
%s
', table.concat(classes, ' '), s )

end

return p-------------------------------------------------------------------------------- -- Module:Hatnote -- -- -- -- This module produces hatnote links and links to related articles. It -- -- implements the and meta-templates and includes -- -- helper functions for other Lua hatnote modules. --


local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local mArguments -- lazily initialise Module:Arguments local yesno -- lazily initialise Module:Yesno

local p = {}


-- Helper functions


local function getArgs(frame) -- Fetches the arguments from the parent frame. Whitespace is trimmed and -- blanks are removed. mArguments = require('Module:Arguments') return mArguments.getArgs(frame, {parentOnly = true}) end

local function removeInitialColon(s) -- Removes the initial colon from a string, if present. return s:match('^:?(.*)') end

function p.findNamespaceId(link, removeColon) -- Finds the namespace id (namespace number) of a link or a pagename. This -- function will not work if the link is enclosed in double brackets. Colons -- are trimmed from the start of the link by default. To skip colon -- trimming, set the removeColon parameter to true. checkType('findNamespaceId', 1, link, 'string') checkType('findNamespaceId', 2, removeColon, 'boolean', true) if removeColon ~= false then link = removeInitialColon(link) end local namespace = link:match('^(.-):') if namespace then local nsTable = mw.site.namespaces[namespace] if nsTable then return nsTable.id end end return 0 end

function p.formatPages(...) -- Formats a list of pages using formatLink and returns it as an array. Nil -- values are not allowed. local pages = {...} local ret = {} for i, page in ipairs(pages) do ret[i] = p._formatLink(page) end return ret end

function p.formatPageTables(...) -- Takes a list of page/display tables and returns it as a list of -- formatted links. Nil values are not allowed. local pages = {...} local links = {} for i, t in ipairs(pages) do checkType('formatPageTables', i, t, 'table') local link = t[1] local display = t[2] links[i] = p._formatLink(link, display) end return links end

function p.makeWikitextError(msg, helpLink, addTrackingCategory) -- Formats an error message to be returned to wikitext. If -- addTrackingCategory is not false after being returned from -- Module:Yesno, and if we are not on a talk page, a tracking category -- is added. checkType('makeWikitextError', 1, msg, 'string') checkType('makeWikitextError', 2, helpLink, 'string', true) yesno = require('Module:Yesno') local title = mw.title.getCurrentTitle() -- Make the help link text. local helpText if helpLink then helpText = ' (help)' else helpText = end -- Make the category text. local category if not title.isTalkPage and yesno(addTrackingCategory) ~= false then category = 'Hatnote templates with errors' category = string.format( '%s:%s', mw.site.namespaces[14].name, category ) else category = end return string.format( '%s', msg, helpText, category ) end


-- Format link -- -- Makes a wikilink from the given link and display values. Links are escaped -- with colons if necessary, and links to sections are detected and displayed -- with " § " as a separator rather than the standard MediaWiki "#". Used in -- the template.


function p.formatLink(frame) local args = getArgs(frame) local link = args[1] local display = args[2] if not link then return p.makeWikitextError( 'no link specified', 'Template:Format hatnote link#Errors', args.category ) end return p._formatLink(link, display) end

function p._formatLink(link, display) -- Find whether we need to use the colon trick or not. We need to use the -- colon trick for categories and files, as otherwise category links -- categorise the page and file links display the file. checkType('_formatLink', 1, link, 'string') checkType('_formatLink', 2, display, 'string', true) link = removeInitialColon(link) local namespace = p.findNamespaceId(link, false) local colon if namespace == 6 or namespace == 14 then colon = ':' else colon = end -- Find whether a faux display value has been added with the | magic -- word. if not display then local prePipe, postPipe = link:match('^(.-)|(.*)$') link = prePipe or link display = postPipe end -- Find the display value. if not display then local page, section = link:match('^(.-)#(.*)$') if page then display = page .. ' § ' .. section end end -- Assemble the link. if display then return string.format('%s', colon, link, display) else return string.format('%s%s', colon, link) end end


-- Hatnote -- -- Produces standard hatnote text. Implements the template.


function p.hatnote(frame) local args = getArgs(frame) local s = args[1] local options = {} if not s then return p.makeWikitextError( 'no text specified', 'Template:Hatnote#Errors', args.category ) end options.extraclasses = args.extraclasses options.selfref = args.selfref return p._hatnote(s, options) end

function p._hatnote(s, options) checkType('_hatnote', 1, s, 'string') checkType('_hatnote', 2, options, 'table', true) local classes = {'hatnote'} local extraclasses = options.extraclasses local selfref = options.selfref if type(extraclasses) == 'string' then classes[#classes + 1] = extraclasses end if selfref then classes[#classes + 1] = 'selfref' end return string.format( '
%s
', table.concat(classes, ' '), s )

end

return p
  1. ^
  2. ^
  3. ^ a b c
  4. ^
  5. ^
  6. ^
  7. ^
  8. ^
  9. ^
  10. ^
  11. ^
  12. ^
  13. ^
  14. ^ a b
  15. ^
  16. ^
  17. ^
  18. ^
  19. ^
  20. ^
  21. ^
  22. ^
  23. ^
  24. ^
  25. ^
  26. ^
  27. ^
  • Ekberg M., Larsson M., Hård S. (1990). "Multilevel Phase Holograms Manufactured by Electron-Beam Lithography". Opt. Lett. (OSA) 15 (10): 568-569. 0146-9592/90/100568-02$2.00/0
This article was sourced from Creative Commons Attribution-ShareAlike License; additional terms may apply. World Heritage Encyclopedia content is assembled from numerous content providers, Open Access Publishing, and in compliance with The Fair Access to Science and Technology Research Act (FASTR), Wikimedia Foundation, Inc., Public Library of Science, The Encyclopedia of Life, Open Book Publishers (OBP), PubMed, U.S. National Library of Medicine, National Center for Biotechnology Information, U.S. National Library of Medicine, National Institutes of Health (NIH), U.S. Department of Health & Human Services, and USA.gov, which sources content from all federal, state, local, tribal, and territorial government publication portals (.gov, .mil, .edu). Funding for USA.gov and content contributors is made possible from the U.S. Congress, E-Government Act of 2002.
 
Crowd sourced content that is contributed to World Heritage Encyclopedia is peer reviewed and edited by our editorial staff to ensure quality scholarly research articles.
 
By using this site, you agree to the Terms of Use and Privacy Policy. World Heritage Encyclopedia™ is a registered trademark of the World Public Library Association, a non-profit organization.
 


Copyright © World Library Foundation. All rights reserved. eBooks from Project Gutenberg are sponsored by the World Library Foundation,
a 501c(4) Member's Support Non-Profit Organization, and is NOT affiliated with any governmental agency or department.