Skip to main content

Some thoughts on photography

The most important tool

Online I read a lot of advice about lenses being the most important component of a photographer's kit. Good, fast, glass was the refrain. Which translates to 'Expensive'. Then, I read several articles where people suggested that was old advice from the days when cameras were just light boxes. In the digital age cameras have a lot to say about the quality of photos, from the sensor resolution to the RAW conversion and of course the flexibility of the controls. Then there are the people who say that it's the photographer who mostly determines the quality of the art.

Here's my opinion. All this is true. But I think the most important tool is light. It's possible that most people posting on line are studio photographers who have full control over light, so they are past that and worry about other things, but for me, I like shooting in natural light and in natural situations and the right light beats equipment any time. In this way, I agree with people who say it is the photographer, because it takes the taste that comes with experience to realize and use the right light and to have a sense for it.

However most photographers are also drawn to the field because of the technical aspects. Photography has always been a technophile's paradise and it's only gotten better with time. We now have over a century's worth of evolution of tools to capture and freeze light. So even though in the end it's the photographer's ability to see the light that makes the fantastic photograph, I completely understand when people talk about gear. That's the other half of the fun!

Some differences between film and digital

The folks over at photo.stackexchange.com are extremely knowledgeable about photo stuff. This is a short collection of some not so well known differences between film and digital cameras/system/technology

Pixel vignetting

All lenses produce optical vignetting: the corners of the image are slightly darker than the center. A detailed description of this common type of vignetting is available here, and in short, it is due to the structure of the lens acting as a collimator: rays coming from the edges of the scene are shadowed by lens elements while rays from the center are not. Pixel vignetting is an interesting thing that happens only on digital cameras. The light sensing elements on the sensor chip are located inside a well, surrounded by other electronics and mechanical scaffolding. Thus each pixel is at the bottom of a collimator which reduces the mount of light that can strike the sensor at oblique angles. For cameras with a relatively large distance between the sensor and the end of the lens (DSLR design) the rays from the lens strike the sensor fairly perpendicularly. However, for mirrorless cameras the rearmost lens element is located closer to the sensor and this is a greater problem. Pixel vignetting is accounted for by software when the raw sensor data is converted to an image. Also, some sensor designs have tiny lenses above each pixel that guides the incident light down the well onto the sensor, improving light transmission.

Ghosting with older lenses

Film is less reflective than digital sensors. Older lenses were not coated with anti-reflective coatings on the reverse side. Lenses that worked perfectly fine with film may turn out to have a bit more ghosting when used with digital cameras because the sensor is reflecting more light, which is then bouncing off the lens rear elements and forming a ghost image on the sensor.

Photographer's websites

Other links

Comments

Popular posts from this blog

A note on Python's __exit__() and errors

Python's context managers are a very neat way of handling code that needs a teardown once you are done. Python objects have do have a destructor method ( __del__ ) called right before the last instance of the object is about to be destroyed. You can do a teardown there. However there is a lot of fine print to the __del__ method. A cleaner way of doing tear-downs is through Python's context manager , manifested as the with keyword. class CrushMe: def __init__(self): self.f = open('test.txt', 'w') def foo(self, a, b): self.f.write(str(a - b)) def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): self.f.close() return True with CrushMe() as c: c.foo(2, 3) One thing that is important, and that got me just now, is error handling. I made the mistake of ignoring all those 'junk' arguments ( exc_type, exc_val, exc_tb ). I just skimmed the docs and what popped out is that you need to return True or...

Store numpy arrays in sqlite

Use numpy.getbuffer (or sqlite3.Binary ) in combination with numpy.frombuffer to lug numpy data in and out of the sqlite3 database: import sqlite3, numpy r1d = numpy.random.randn(10) con = sqlite3.connect(':memory:') con.execute("CREATE TABLE eye(id INTEGER PRIMARY KEY, desc TEXT, data BLOB)") con.execute("INSERT INTO eye(desc,data) VALUES(?,?)", ("1d", sqlite3.Binary(r1d))) con.execute("INSERT INTO eye(desc,data) VALUES(?,?)", ("1d", numpy.getbuffer(r1d))) res = con.execute("SELECT * FROM eye").fetchall() con.close() #res -> #[(1, u'1d', <read-write buffer ptr 0x10371b220, size 80 at 0x10371b1e0>), # (2, u'1d', <read-write buffer ptr 0x10371b190, size 80 at 0x10371b150>)] print r1d - numpy.frombuffer(res[0][2]) #->[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] print r1d - numpy.frombuffer(res[1][2]) #->[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] Note that for work where data ty...