Okay, so for all those that did attend, and for those that didn't these
are a bunch of notes I'm putting together as I wait for the sky to clear
to try to take some star trail pictures tonight.
I had fun last night. Hope you all did too.
--R
=======================================================================
For those that want to see the things I've done, look here:
http://www.capturing-photons.blogspot.com/
http://picasaweb.google.com/rcludw
Hugin
Great program used as a base for other programs. It can be bit
cumbersome to use though, but it can produce great results, fairly
easily, as was demonstrated last night.
http://hugin.sourceforge.net/
If you've not seen the flickriver, you might be mesmerized for an hour,
like I was during Christmas at my parents house. Just keep scrolling
down.
http://www.flickriver.com/photos/tags/hugin/interesting/
Hugin also has a large number of tutorials:
http://hugin.sourceforge.net/tutorials/index.shtml
Also if you're going to spend hours of time looking at panoramas anyway,
it's probably worth some time to look at the gigapan images.
http://www.gigapan.org
LuminanceHDR (formerly qtpfsgui) for High Dynamic Range pictures
For Ubuntu this was provided by the getdeb repositories. Getdeb is/was
down, but it will probably make it's way into Ubuntu soon enough.
http://qtpfsgui.sourceforge.net/
This is a fairly nice package that will do the fattal tonemapping as
good as photoshop will, something to keep in mind.
So to understand exposure bracketing, there's a good wikipedia entry on
it.
http://en.wikipedia.org/wiki/Bracketing
For most HDR pictures 3 pictures, each 1 EV apart is good. For the
sunset picture I did intervals of 2EV.
Alternatively I could have done 5 pictures in 1EV increments from the
range of -2.0 EV to 2.0 EV would have worked swell too. Most cameras
can do the EV, but not all of them will do the automatic bracketing.
Focus Stacking:
This is the tutorial I pretty much followed, except I started
with .JPG's and not .TIF's. This requires Hugin.
http://photoblog.edu-perez.com/2009/01/greater-depth-field-macro.html
For those that don't want to read:
align_image_stack -m -a AIS_ *.JPG #JPG may need to be jpg instead.
enfuse -o result.tif --wExposure=0 --wSaturation=0 --wContrast=1 \
--HardMask AIS_????.tif
Color Profiling:
http://www.argyllcms.com/
You may need to compile this one by hand in order for it to properly
work. There's a list of equipment that Argyll will work with if you're
looking to buy something ( or just bring your display to me with a cold
beer or two, and I'll profile it for you).
Also for many printers, cameras and scanners, it's possible to get a
color profile (.icc file) for the device. UFRaw makes many profiles
available for different cameras.
Also the x-rite color checker passport is useful not only for color
checking, but for instant tweaking of white-balance and exposure.
http://www.amazon.com/X-Rite-MSCCPP-ColorChecker-Passport/dp/B002NU5UW8
The colorimeter I have is a colormunki create:
http://www.colormunki.com/product/show?product=create
.icc profiles are supported by gnome, gimp, UFRaw and many other
graphics programs.
EyeFI for Linux:
The trick is to install the EyeFi and use it under windows first. Then
you can get the upload key.
Once you have the upload key you can use this:
http://returnbooleantrue.blogspot.com/2009/04/eye-fi-standalone-server-version-20.html
http://github.com/tachang/EyeFiServer
(Look in the Release 2.0 directory)
Put the upload key in the configuration file in the right spot, then run
the server with the -c option pointing to your config file.
To add a new wi-fi network, use this:
http://dave-hansen.blogspot.com/2009/02/new-release-008.html
There exists an android app called "Wi-Fi Droid" that does the same
thing as the server above.
Picture Frames:
This is the part I didn't get to last night. I wrote a python script
(addpic.py) to easily convert images to a 1024x768 frame. This script
chooses the height or width of the image and resizes it down, keeping
the aspect correct, allowing the use to save space on a 2gig card since
the display won't even do 1MP yet alone 12MP.
I can go through my images drag them into the terminal where the script
is running, hit return, and the images will pop into the card at a lower
resolution.
#!/usr/bin/env python
def read_params(path):
"""
Returns a tuple in the form of
(last file number, width, height, keepaspect ratio)
To get the current file number add one to the last file number.
"""
filename="%s/.idx"
file=open(filename%path,"r")
data = file.readline()
file.close()
(fileno, width, height, keepaspect)=tuple(data.split(","))
fileno=int(fileno)
width=int(width)
height=int(height)
keepaspect=bool(keepaspect)
return (fileno, width, height, keepaspect)
def write_params(path, params):
"""
Writes the tuple in the form of
(last file number, width, heigh, keepaspect ratio)
The last file number is the last one written to disk.
"""
filename="%s/.idx"
f=open(filename%path,"w")
outparams=map(str,params)
f.write(",".join(outparams))
f.close()
def resize_image(imagefile, width, height, keepaspect, path, fileno):
import Image
iml = Image.open(imagefile)
x,y = iml.size
ratio = float(x) / float(y)
w=width
h=height
if keepaspect:
if ratio > 1.0:
h=int (width / ratio)
else:
w=int (ratio * height)
size=4-len(str(fileno))
prefix = size * "0"
filename=prefix + str(fileno) + ".jpg"
outputpath=path+"/images/"+filename
print "Converting %s --> %s " % (imagefile, outputpath)
newiml=iml.resize((w,h), Image.ANTIALIAS)
newiml.save(outputpath)
def clean_card(path):
import os
if path=="":
raise ValueError("Empty Path")
if path[0] != "/":
raise ValueError("Not absolute path")
if path=="/":
raise ValueError("Not the root filesystem, are you mad?")
if path==os.environ["HOME"]:
raise ValueError("Not going to delete your home filesystem, sorry")
os.system("rm -rf %s/*" % path)
os.system("mkdir %s/images" %path)
def main():
from optparse import OptionParser
parser=OptionParser()
parser.add_option("-n", "--new", default=False, action="store_true", dest="new", help="New card")
parser.add_option("-x", "--width", default=800, type="int", dest="width", help="Width",
metavar="WIDTH")
parser.add_option("-y", "--height", default=600, type="int", dest="height", help="Height",
metavar="HEIGHT")
parser.add_option("-a", "--noaspect", action="store_false", dest="keepaspect", help="Don't keep aspect")
parser.add_option("-p", "--path", default="/media/Pictures", type="string", dest="path", help="Path to sdcard", metavar="PATH")
parser.add_option("-c", "--pipe", action="store_true", dest="pipe", help="read files names from standard input", default=False)
(options,args) = parser.parse_args()
if options.new==True:
print "Are you sure you want to delete the card and it's contents at %s (y/N)?" % options.path
input=raw_input()
if input != "y" and input != "Y":
exit()
clean_card(options.path)
write_params(options.path, (0, options.width, options.height, options.keepaspect))
(file_number, width, height, keepaspect) = read_params(options.path)
for arg in args:
resize_image(arg, width, height, keepaspect, options.path, file_number+1)
file_number+=1
if options.pipe:
print
print "Drag and drop files here, then press return to process"
print "CTRL-D to Exit"
print
while True:
try:
line=raw_input().strip() #split("'").reverse()
line = line.split("'")
line.reverse()
while len(line) > 0:
arg=line.pop().strip()
if arg!='':
resize_image(arg, width, height, keepaspect, options.path, file_number+1)
file_number+=1
except EOFError:
break
write_params(options.path, (file_number, options.width, options.height, options.keepaspect))
if __name__=="__main__":
main()
_______________________________________________
Fwlug mailing list
[email protected]
http://fortwaynelug.org/mailman/listinfo/fwlug_fortwaynelug.org