Roommate gave me his old Pandigital eReader, which he never cared for, which gave me the perfect opportunity to take it apart and harvest its innards (and also have a cocktail!).
A WiFi radio, two cute little speakers, a rechargeable battery, the LCD, and the digitizer — There’s good stuff in there. Once I figure out how to break out the ribbon cables WATCH OUT, WORLD.
So I hit a wall on my Image Analysis project, trying to get this damnable histogram specification section to work. Got it working in pure AS3, but it’s too slow to deploy and I can’t get it to work in Pixel Bender. It needs to sample the color value of a pixel in the source image, and then use that value as the lookup index for another input vector, and it Just. Will. Not. Work.
Something in that the available range of pixel values in PB is [0,1], and the conversions are just not working out.
But! Anyway, in the meantime, while I bang my head against this wall, I’m a-learnin’ my way through Make: Electronics as well. This thing makes a noise, and I love it so.
Background: I’m working my way through the book Practical Algorithms Image Analysis, and documenting my progress here. I remain WELL AWARE that I’m reinventing the wheel, and that nearly all of this is, you know, already built into Flash, but it’ll be a learnful experience.
Building on my Histogram viewer, the next task is to select a sub-range of the input intensity histogram and remap it to a full dynamic range in an output histogram, referred to by the text as “Histogram Expansion (HE)”.
The helpful linear mapping function to stretch the interval [xmin, xmax] to cover the full [0,255] range is provided as:
Now, for this to work for color images, that function will have to be performed for each of the red, green, and blue intensity values for each pixel. Solving this through .getPixel() and .setPixel() proved to be much too slow and processor-heavy, so I made a quick PixelBender kernel to get the job done. Click through for a demo and explanation.
I picked up this book, randomly, and I’m enjoying working my way through it. It starts off with the fundamentals, things like scaling and rotating images, but then quickly moves on to more complex stuff.
I thought it might be a fun challenge to work through the book in Flash and Actionscript, not by just porting over the existing code examples, but by analyzing the text and coming up with my own implementation from scratch. Think I’ll learn more from rolling my own than if I’m just replacing calls for calls.
I’m especially excited for everyone to constantly remind me that Flash has helpfully taken care of the whole “rotating an image” thing. I’m definitely not going to be the first, and I most assuredly won’t be the best, but doggone it, it’ll be fun to try.
First example starts easy enough: Histograms! Specifically just, like, looking at them.
So I made my own histogram visualizer, based loosely on the graphs I use for the Pulse project. Click through and I’ll walk you through it.
I’m not going to spend a lot of time explaining what fastICA is, or what Independent Component Analysis is in general, but if you need it in Actionscript and you’ve been looking for it, here it is. I only vaguely understand how it works (for now!), but math is math and code is code, and once I had my Matrix Math package set up, it was just a matter of effort and optimization.
It’s ported it over from the MDP package in Python. It’s not the full implementation, just as much as I needed to make the Pulse project work, so at some point I’m going to finish porting over the rest of the internal methods. It’s mad slow, yo! My next goal is to offload the heavier calculations to PixelBender, like I did with the Lomb-Scargle code the Pulse project used, but until then, you’ll need to only run it against reasonably-small data sets if you want it to run with anything approaching “speed”.
While I work on getting a code repository set up, use the contact form or leave a message in the comments if you want me to send it to you, I want to share! Click through, or on the image above, to launch a demo.
Spring is fast approaching here in NYC, and snow showers are (hopefully) behind us. The LABS group, though, is saddened by this, because it means our interactive 2010 Holiday installation is officially out of season.
Since I know I won’t be with the agency much longer, I thought it would be a great parting gift to assemble the MakerBot Thing-O-Matic the team had ordered, and along the way pick up tips and experience for when I buy my own for home.
Some people get really cranky when they see me working on it, demanding to know what it’s good for and pointing out that it’s not super-great resolution and all the blaugh-blaugh-I-DO-declare. BALLS, I say. I’m not going to be making ART with it, I’m going to be making tools and parts. And as long as you can take a file and some sandpaper to it, the finish quality is kind of up to the operator, thank you very much.
I managed to get one solid print out of it before the whole thing died in my arms yesterday. Hopefully I can figure out what went wrong, I think it’s something with the power supply, and get it up and running permanently before I leave for good. And mine’s in the mail!
On any given day in NYC, something like half of all trending locations are going to be some sort of player in the marketing or media fields. I’m reminded that New York really only has five industries: Publishing, Advertising, Fashion, Finance, and TV. Guess which of those industries has a lot of free time on its hands to diddle around on their iPhones.
The above is the latest version of a labor of love I’ve been working on, based on research coming out of the MIT Media Lab. Turns out the veeeery minute changes in color of your skin tone can, frame-by-frame, be read and decoded to arrive at a just-fine measure of your pulse.