New example: content-aware image resizing with seam-carving #123
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Seam carving is an algorithm for "content-aware resizing", allowing an image to be re-scaled while attempting to preserve the interesting features of the image. It works by removing low-energy "seams" (vertical or horizontal paths of pixels) to reduce either the width or height of the image. For more info, see https://en.wikipedia.org/wiki/Seam_carving.
This patch provides a parallel implementation. It can remove as many seams as desired, and can also generate an animation (as a .gif) of the process, showing how the image shrinks gradually as more seams are removed. It's super cool... check it out!
As part of this patch, I also implemented support for generating GIF files. This turned out to be an interesting problem of its own, because GIFs use a custom form of LZW compression. Very tricky to get the bits right...