mirror of
https://github.com/wassname/scikit-image.git
synced 2026-06-28 04:55:16 +08:00
55f5103dd8
Modified travis_script.sh to account for the new structure of the gallery Added README.txt files in directories of gallery examples Fixed references to gallery images in user guide pages Fixed broken links
97 lines
2.3 KiB
Python
97 lines
2.3 KiB
Python
"""
|
|
============
|
|
Seam Carving
|
|
============
|
|
|
|
This example demonstrates how images can be resized using seam carving [1]_.
|
|
Resizing to a new aspect ratio distorts image contents. Seam carving attempts
|
|
to resize *without* distortion, by removing regions of an image which are less
|
|
important. In this example we are using the Sobel filter to signify the
|
|
importance of each pixel.
|
|
|
|
.. [1] Shai Avidan and Ariel Shamir
|
|
"Seam Carving for Content-Aware Image Resizing"
|
|
http://www.cs.jhu.edu/~misha/ReadingSeminar/Papers/Avidan07.pdf
|
|
|
|
"""
|
|
from skimage import data, draw
|
|
from skimage import transform, util
|
|
import numpy as np
|
|
from skimage import filters, color
|
|
from matplotlib import pyplot as plt
|
|
|
|
|
|
hl_color = np.array([0, 1, 0])
|
|
|
|
img = data.rocket()
|
|
img = util.img_as_float(img)
|
|
eimg = filters.sobel(color.rgb2gray(img))
|
|
|
|
plt.title('Original Image')
|
|
plt.imshow(img)
|
|
|
|
"""
|
|
.. image:: PLOT2RST.current_figure
|
|
"""
|
|
|
|
resized = transform.resize(img, (img.shape[0], img.shape[1] - 200))
|
|
plt.figure()
|
|
plt.title('Resized Image')
|
|
plt.imshow(resized)
|
|
|
|
"""
|
|
.. image:: PLOT2RST.current_figure
|
|
"""
|
|
|
|
out = transform.seam_carve(img, eimg, 'vertical', 200)
|
|
plt.figure()
|
|
plt.title('Resized using Seam Carving')
|
|
plt.imshow(out)
|
|
|
|
"""
|
|
.. image:: PLOT2RST.current_figure
|
|
|
|
Resizing distorts the rocket and surrounding objects, whereas seam carving
|
|
removes empty spaces and preserves object proportions.
|
|
|
|
Object Removal
|
|
--------------
|
|
|
|
Seam carving can also be used to remove artifacts from images.
|
|
This requires weighting the artifact with low values. Recall lower weights are
|
|
preferentially removed in seam carving. The following code masks the rocket's
|
|
region with low weights, indicating it should be removed.
|
|
|
|
"""
|
|
|
|
masked_img = img.copy()
|
|
|
|
poly = [(404, 281), (404, 360), (359, 364), (338, 337), (145, 337), (120, 322),
|
|
(145, 304), (340, 306), (362, 284)]
|
|
pr = np.array([p[0] for p in poly])
|
|
pc = np.array([p[1] for p in poly])
|
|
rr, cc = draw.polygon(pr, pc)
|
|
|
|
masked_img[rr, cc, :] = masked_img[rr, cc, :]*0.5 + hl_color*.5
|
|
plt.figure()
|
|
plt.title('Object Marked')
|
|
|
|
plt.imshow(masked_img)
|
|
|
|
"""
|
|
.. image:: PLOT2RST.current_figure
|
|
"""
|
|
|
|
eimg[rr, cc] -= 1000
|
|
|
|
plt.figure()
|
|
plt.title('Object Removed')
|
|
out = transform.seam_carve(img, eimg, 'vertical', 90)
|
|
resized = transform.resize(img, out.shape)
|
|
plt.imshow(out)
|
|
plt.show()
|
|
|
|
"""
|
|
.. image:: PLOT2RST.current_figure
|
|
"""
|