本文整理汇总了Python中menpo.transform.NonUniformScale.apply方法的典型用法代码示例。如果您正苦于以下问题:Python NonUniformScale.apply方法的具体用法?Python NonUniformScale.apply怎么用?Python NonUniformScale.apply使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类menpo.transform.NonUniformScale
的用法示例。
在下文中一共展示了NonUniformScale.apply方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: rescale
# 需要导入模块: from menpo.transform import NonUniformScale [as 别名]
# 或者: from menpo.transform.NonUniformScale import apply [as 别名]
def rescale(self, scale, interpolator='scipy', round='ceil', **kwargs):
r"""
Return a copy of this image, rescaled by a given factor.
Landmarks are rescaled appropriately.
Parameters
----------
scale : float or tuple
The scale factor. If a tuple, the scale to apply to each dimension.
If a single float, the scale will be applied uniformly across
each dimension.
interpolator : 'scipy', optional
The interpolator that should be used to perform the warp.
Default: 'scipy'
round: {'ceil', 'floor', 'round'}
Rounding function to be applied to floating point shapes.
Default: 'ceil'
kwargs : dict
Passed through to the interpolator. See `menpo.interpolation`
for details. Note that mode is set to nearest to avoid numerical
issues, and cannot be changed here by the user.
Returns
-------
rescaled_image : type(self)
A copy of this image, rescaled.
Raises
------
ValueError:
If less scales than dimensions are provided.
If any scale is less than or equal to 0.
"""
# Pythonic way of converting to list if we are passed a single float
try:
if len(scale) < self.n_dims:
raise ValueError(
'Must provide a scale per dimension.'
'{} scales were provided, {} were expected.'.format(
len(scale), self.n_dims
)
)
except TypeError: # Thrown when len() is called on a float
scale = [scale] * self.n_dims
# Make sure we have a numpy array
scale = np.asarray(scale)
for s in scale:
if s <= 0:
raise ValueError('Scales must be positive floats.')
transform = NonUniformScale(scale)
from menpo.image.boolean import BooleanImage
# use the scale factor to make the template mask bigger
template_mask = BooleanImage.blank(transform.apply(self.shape),
round=round)
# due to image indexing, we can't just apply the pseduoinverse
# transform to achieve the scaling we want though!
# Consider a 3x rescale on a 2x4 image. Looking at each dimension:
# H 2 -> 6 so [0-1] -> [0-5] = 5/1 = 5x
# W 4 -> 12 [0-3] -> [0-11] = 11/3 = 3.67x
# => need to make the correct scale per dimension!
shape = np.array(self.shape, dtype=np.float)
# scale factors = max_index_after / current_max_index
# (note that max_index = length - 1, as 0 based)
scale_factors = (scale * shape - 1) / (shape - 1)
inverse_transform = NonUniformScale(scale_factors).pseudoinverse
# for rescaling we enforce that mode is nearest to avoid num. errors
if 'mode' in kwargs:
raise ValueError("Cannot set 'mode' kwarg on rescale - set to "
"'nearest' to avoid numerical errors")
kwargs['mode'] = 'nearest'
# Note here we pass warp_mask to warp_to. In the case of
# Images that aren't MaskedImages this kwarg will
# harmlessly fall through so we are fine.
return self.warp_to(template_mask, inverse_transform,
warp_landmarks=True,
interpolator=interpolator, **kwargs)