[PYTHON] sculpture de couture (recadrage d'image) j'ai essayé

seam carving? japan.gif

la sculpture de couture n'est pas une * simple réduction * lors du redimensionnement d'une image C'est un algorithme qui écrase les parties inutiles de l'image dans un "bon feeling". Si vous regardez cette vidéo, vous pouvez facilement comprendre ce qui va se passer. Quand vous le voyez pour la première fois, cela ressemble à de la magie.

C'est une méthode proposée dans SigGraph2007, c'est donc une méthode de longue date. [^ 1]

Essayer

Je l'ai essayé sur IPython Notebook, donc je pense que cela ne fonctionnera que sur notebook

import matplotlib.pyplot as plt
from skimage import transform
from skimage import filters
import cv2

%matplotlib inline


def carve(image, num, mode='vertical'):
    """Fonction pour "couper""""
    #Convertit l'image en échelle de gris et calcule la représentation de l'amplitude du gradient Sobel.
    #c'est"energy map"Ce sont les informations nécessaires pour l'algorithme de sculpture de couture.
    #Vous ne devez pas nécessairement utiliser Sobel pour la carte énergétique.
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    mag = filters.sobel(gray.astype("float"))
    
    carved = transform.seam_carve(image, mag, mode=mode, num=num)  #Coupé!
    carved = (carved * 255).astype('uint8')
    return carved


#Chargez l'image d'origine
original_image_path = 'images/original/japan.jpg'

# load the image
image = cv2.imread(original_image_path)
# show the original image
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))


#Découpez petit à petit
carved = image
for i in range(21):
    carved = carve(carved, num=10, mode='vertical')
    plt.imsave('images/carved/japan_v_{}.jpg'.format(10*i), cv2.cvtColor(carved, cv2.COLOR_BGR2RGB))

Alors, quel type d'algorithme est la sculpture de couture?

«couture» signifie «couture» et «sculpture» signifie «sculpture». Ici, «couture» signifie une ligne tracée «de haut en bas» ou «de gauche à droite» par rapport à l'image. Je vais définir cette couture pour traverser la partie "s'en moque" de l'image. (Par exemple, la ligne rouge dans la figure ci-dessous [^ 2] est la "couture") image

En recadrant l'image le long des coutures et en la superposant joliment, vous pouvez redimensionner l'image comme le gif au début. La couture, couture, est calculée en calculant la ligne qui traverse l'image pour que le changement sur la carte énergétique soit petit [^ 3].

Dans cet exemple, il est rétréci uniquement dans le sens horizontal, mais bien sûr, il peut également être rétréci dans le sens vertical. En plus de rétrécir, il peut également être expansé. [^ 4]

Deep Learning? la sculpture sur couture n'est pas un apprentissage en profondeur. Cependant, de l'ingéniosité telle que l'utilisation de la zone d'intérêt extraite par Deep Learning comme une carte énergétique peut apparaître à l'avenir.

Galerie

Il existe de nombreuses images qui ne fonctionnent pas. Voici un exemple réussi.

Il est facile de travailler si la partie à laquelle vous souhaitez prêter attention apparaît dans l'image de manière dispersée. (Par exemple, au Taj Mahal, la flèche est bien dispersée à gauche et à droite, et vous pouvez découper une partie vide au milieu.) Dans le cas d'une image avec une seule partie à remarquer, il arrive souvent que l'extrémité gauche et l'extrémité droite soient découpées dans l'ordre, ce qui n'est pas très intéressant.

De plus, je n'étais pas doué pour les images qui ne pouvaient pas être découpées en premier lieu (par exemple, une image d'un chat dans l'image complète). (Je pense que cela ne peut pas être aidé parce que cela ne peut pas être coupé en premier lieu)

Taj Mahal

taj.gif Je resserre bien l'écart.

Château de Kowloon

kuron.gif Vous pouvez voir que l'image entière est rétrécie horizontalement, mais les lettres sur le signe rouge sur la gauche ne sont pas rétrécies. (Le signe lui-même diminue progressivement)

Les références

--Blog d'introduction - http://www.pyimagesearch.com/2017/01/23/seam-carving-with-opencv-python-and-scikit-image/ --Papier - http://perso.crans.org/frenoy/matlab2012/seamcarving.pdf

[^ 1]: Il semble que cela ait été annoncé par l'institut de recherche de Mitsubishi Electric. [^ 2]: Source: Document de référence: Figure 1 [^ 3]: En raison de mon manque d'étude, je n'ai pas pu dresser une liste de ce type de carte énergétique. [^ 4]: En ce qui concerne l'expansion, scikit-image n'a pas d'implémentation, vous devez donc l'implémenter vous-même.

Recommended Posts

sculpture de couture (recadrage d'image) j'ai essayé
J'ai essayé la classification d'image d'AutoGluon
J'ai essayé de frapper 100 traitement d'image (Q1 ~ Q10)
J'ai essayé de jouer avec l'image avec Pillow
J'ai essayé la reconnaissance d'image simple avec Jupyter
J'ai essayé de gratter
J'ai essayé PyQ
J'ai essayé AutoKeras
J'ai essayé le moulin à papier
J'ai essayé django-slack
J'ai essayé Django
J'ai essayé spleeter
J'ai essayé cgo
J'ai essayé de "lisser" l'image avec Python + OpenCV
J'ai essayé la reconnaissance d'image de CIFAR-10 avec Keras-Learning-
J'ai essayé de "différencier" l'image avec Python + OpenCV
J'ai essayé la reconnaissance d'image de CIFAR-10 avec la reconnaissance d'image Keras-
J'ai essayé d'obtenir une image en grattant
J'ai essayé de corriger la forme trapézoïdale de l'image
J'ai essayé de "binariser" l'image avec Python + OpenCV
J'ai essayé d'utiliser le filtre d'image d'OpenCV
J'ai essayé d'utiliser paramétré
J'ai essayé d'utiliser argparse
J'ai essayé d'utiliser la mimesis
J'ai essayé d'utiliser anytree
J'ai essayé d'exécuter pymc
J'ai essayé le spoofing ARP
J'ai essayé de détecter l'iris à partir de l'image de la caméra
J'ai essayé d'utiliser aiomysql
J'ai essayé d'utiliser Summpy
J'ai essayé Python> autopep8
[OpenCV / Python] J'ai essayé l'analyse d'image de cellules avec OpenCV
J'ai essayé d'utiliser coturn
J'ai essayé d'utiliser Pipenv
J'ai essayé d'utiliser matplotlib
J'ai essayé d'utiliser "Anvil".
J'ai essayé d'utiliser Hubot
J'ai essayé d'utiliser ESPCN
J'ai essayé PyCaret2.0 (pycaret-nightly)
J'ai essayé d'utiliser openpyxl
J'ai essayé le deep learning
J'ai essayé AWS CDK!
J'ai essayé d'utiliser Ipython
J'ai essayé de déboguer.
J'ai essayé d'utiliser PyCaret
J'ai essayé d'utiliser cron
J'ai essayé la mapview de Kivy
J'ai essayé d'utiliser ngrok
J'ai essayé d'utiliser face_recognition
J'ai essayé d'utiliser Jupyter
J'ai essayé de déplacer EfficientDet
J'ai essayé la programmation shell
J'ai essayé d'utiliser doctest
J'ai essayé Python> décorateur
J'ai essayé d'exécuter TensorFlow