Image Retargeting
图像缩略图、图像重定向
前言
这篇文章主要对比DL出现之前的几种上古算法,为了作为DL方法的引子而存在,顺便博客也该更新点新内容上来了,这篇博文就是介绍了我最近在玩什么。
本文方法
传统的方法主要有三种:Resize
(拉伸、收缩
)、Crop
(裁剪
)和Seam Carving
(接缝裁剪
)。
其中接缝裁剪这个算法挺好玩的,论文参见 Seam Carving,截止本篇博文,被引用次数是1914次,可以说是很经典的文章了。
该论文实现的效果图:
本文用到的python库
三种算法的对比由python
实现,python版本为python3.8
,对应下列依赖库版本为conda
直接安装,不同版本请注意自己改动部分接口。
opencv 用于图像处理
scipy 用于图像卷积
notebook 提供环境
matplotlib 用于图像显示
tqdm 用于进度显示(可不用 主要是因为SC算法太慢了 会让人觉得程序卡了
numpy 用于辅助opencv
具体引用代码如下:
import cv2
import matplotlib.pyplot as plt
import numpy as np
from scipy.ndimage.filters import convolve
from tqdm import trange
图像的读入
都有opencv了,还用问么?
img = cv2.imread('test1.jpg')
imshow(img)
img.shape
图像的显示
其中imshow()函数是自己定义的,用于显示处理结果和处理过程的中间图像,这样就方便在notebook中查看了,需要注意的是opencv存储图像的格式和PIL不太一样,为bgr,需要转换。
def imshow(img):
if (len(img.shape) == 2) :
plt.imshow(img)
plt.show()
return
b,g,r = cv2.split(img)
img_rgb = cv2.merge([r,g,b])
plt.imshow(img_rgb)
plt.show()
方法一:裁剪(Crop)
裁剪配合numpy的花式索引
(别笑,这是正式名称)即可实现,本