【问题标题】:Skewing an array in Python在 Python 中倾斜数组
【发布时间】:2016-01-10 04:03:52
【问题描述】:

我有一个二维数组,我将使用scipy.misc.toimage() 将其保存为灰度图像。在这样做之前,我想将图像倾斜一个给定的角度,像scipy.ndimage.interpolation.rotate()一样插值:

上图只是为了说明倾斜过程。我知道我必须放大我的图像才能包含倾斜的版本。我怎样才能做到这一点?我更愿意为此使用 scipy。

【问题讨论】:

  • 这引出了一个问题,为什么不直接使用scipy.ndimage.interpolation.rotate()
  • @DrBwts scipy.ndimage.interpolation.rotate() 可以这样做吗?我不想旋转整个图像,我想倾斜它以便只有一个轴被旋转。
  • 抱歉,我误读了您的帖子,看看this post 看看是否有帮助。
  • PIL 具有剪切/倾斜功能。查找 PIL 仿射变换

标签: python image numpy image-processing scipy


【解决方案1】:

这个脚本可以做到这一点。

a=imread("sorNB.png")
h,l=a.shape
dl=50
b=numpy.zeros((h,l+dl),dtype=a.dtype)
for y in range(h):
    dec=(dl*(h-y))//h
    b[y,dec:dec+l]=a[y,:]

由于内部赋值(b[y,dec:dec+l]=a[y,:]) 是纯numpy,所以速度非常快。

编辑

感谢 ivan_pozdeev。一种插值方式:

from scipy.ndimage.interpolation import geometric_transform
a=imread("sorNB.png")
h,l=a.shape
def mapping(lc):
    l,c=lc
    dec=(dl*(l-h))/h
    return l,c+dec
figure(1)    
dl=50;c=geometric_transform(a,mapping,(h,l+dl),order=5,mode='nearest')
imshow (concatenate((a,zeros((225,50)),c),axis=-1),cmap=cm.gray)

【讨论】:

  • 从外观上看,这并没有做亚像素插值。因此,倾斜线上的“锯齿”图案。
  • 是的,正如@ivan_pozdeev 指出的那样,它不会进行插值。但是,对于某些其他应用程序,我可能需要它。感谢您的意见!
猜你喜欢
  • 1970-01-01
  • 2019-12-15
  • 2013-05-25
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 2023-03-23
  • 1970-01-01
  • 2016-12-25
相关资源
最近更新 更多