I implemented the algorithm as a C++ program, and the results look similar to those on the algorithm's webpage.
These were the source images:
After 1 iteration:
After 5 iterations:
After 12(phew) iterations:
Even though the ghost is pretty much non-existent after 12 iterations, there's still traces of the head (it's darker than the rest of the bridge) if you look really really hard. Also, the small branch movements did not get deghosted very well, expected, because the assumption that most images represent the background and are identical do not hold for these branches.
The branches would need some additional constraints to deal with, but the small leftover of the person could be removed if I just ignored the lowest weight. But, if I just ignore an image, the algorithm would lose it's noise removal qualities. So I decided to distribute the final weights logarithmically (I think) instead of linearly, causing the smaller weights to become even smaller without changing the large weights much. If I do this by a factor of 5 , then the ghost is completely gone, but the "do not enter" sign starts to show signs of noise (it's hard to see because it's jpeg, maybe I should upload another image some time...). If I weigh the final weights by a factor of 2, however, the ghost still remains. Finding the distribution nirvana is on my to-do list, after I get pyramid implementation done (will blog about that soon).
No comments:
Post a Comment