Dylan Harness

seam-carving

Python Seam Carving module

seam_carver is a small tool for re-targeting images to any dimension greater or smaller. It uses the process of seam carving as originally described by Shai Avidan & Ariel Shamir in http://perso.crans.org/frenoy/matlab2012/seamcarving.pdf

A combination of the gradient energy (determined with the sobel filter) and a simple color energy is used to determine the least important seam. Addition of seams occurs by the same mechanism as described in the paper.

Installation

pip install seam_carver

Basic Usage

from scipy import misc
import numpy as np
from seam_carver import intelligent_resize
rgb_weights = [-3, 1, -3]
mask_weight = 10
cat_img = misc.imread('./demo/cat.png')
mask = np.zeros(cat_img.shape)
resized_img = intelligent_resize(cat_img, 0, -20, rgb_weights, mask, mask_weight)
misc.imsave('./demo/cat_shrunk.png', resized_img)

Options

def intelligent_resize(img, d_rows, d_columns, rgb_weights, mask, mask_weight):
"""
Changes the size of the provided image in either the vertical or horizontal direction,
by increasing or decreasing or some combination of the two.
Args:
img (n,m,3 numpy matrix): RGB image to be resized.
d_rows (int): The change (delta) in rows. Positive number indicated insertions, negative is removal.
d_columns (int): The change (delta) in columns. Positive number indicated insertions, negative is removal.
rgb_weights (1,3 numpy matrix): Additional weight paramater to be applied to pixels.
mask (n,m,3 numpy matrix): Mask matrix indicating areas to make more or less likely for removal.
mask_weight (int): Scalar multiple to be applied to mask.
Returns:
n,m,3 numpy matrix: Resized RGB image.
"""

Examples

For more examples and details see the demo jupyter notebook

Original Alt text

Resized

Alt text

Original

Alt text

Resized

Alt text

Limitations

Original

Alt text

Resized

Alt text