【问题标题】:How to resize an image by DM scripting?如何通过 DM 脚本调整图像大小?
【发布时间】:2018-05-22 01:40:01
【问题描述】:

如何通过 DM 脚本调整图像大小?

我们在处理图像时,可以通过DM软件中的“处理-缩放-尺寸-宽高”来调整图像的大小,然后改变像素的宽高数。

当我们调整图像大小时,我们还可以选择“约束比例”。

如何通过脚本来实现?

【问题讨论】:

    标签: image image-resizing dm-script


    【解决方案1】:

    好问题。

    您需要几个命令。 ImageResize() 更改图像的物理尺寸(即像素尺寸),同时保留元数据(标签),同时更改校准,以使整体视野在校准单位中保持不变。但是,像素值被重置为 0,需要在第二步中重新计算。

    命令warp() 用于任何具有强度值双线性插值的映射,因此您可以使用该命令进行缩放(加上插值)。

    如果您想使用“最近邻”插值(即复制像素值),您可以通过简单的数据复制轻松地实现这一点索引。

    由于您要求的是脚本中的“基本需求”,因此它的答案实际上已包含在更高版本 GMS 的 F1 帮助文档的“示例”部分中,所以我只是复制粘贴脚本在这里:

    示例 3:使用强度插值调整大小

    image in, out1, out2
    if ( !GetFrontImage( in ) )
     Throw( "No image loaded." )
    
    number sx, sy
    GetSize( in, sx, sy )
    number f = 1.8        // scaling factor 
    
    
    // Variant 1, bi-linear interpolation
    out1 := ImageClone( in )
    ImageResize( out1, 2, sx * f, sy * f )
    out1 = Warp( in, icol / f, irow / f )
    SetName( out1, GetName( in ) + " bilinear" )
    ShowImage( out1 )
    
    // Variant 2, nearest-neighbor interpolation / sampling
    out2 := ImageClone( in )
    ImageResize( out2, 2, sx * f, sy * f )
    out2 = in[ icol / f, irow / f ]
    SetName( out2, GetName( in ) + " nn" )
    ShowImage( out2 )
    
    // Note: ImageResize() sets all values to zero and 
    // adjusts spatial calibration to keep same FOV as before 
    

    现在,如果您想限制纵横比,您需要自己编写脚本,确保在 X 和 Y 中使用相同的采样因子。如果您想模仿 '用户输入决赛尺寸'你会做这样的事情:

    image in
    if ( !GetFrontImage( in ) )
     Throw( "No image loaded." )
         
    number sx = ImageGetDimensionSize( in, 0 )
    number sy = ImageGetDimensionSize( in, 1 )
    
    string msg = "Please enter wanted X size."
    msg += "\n(Currently: " + sx + " pixels)"
    number sx_new
    if ( !GetNumber( msg, sx, sx_new) ) 
        exit( 0 ) 
    
    number f = sx_new/sx
    number sy_new = trunc(sx * f)
    Result( "\n New Image size: " + sx_new + " x " + sy_new )
    image out1 := ImageClone( in )
    ImageResize( out1, 2, sx * f, sy * f )
    out1 = Warp( in, icol / f, irow / f )
    SetName( out1, GetName( in ) + " scaled" )
    ShowImage( out1 )
    

    【讨论】:

    • 非常感谢,这正是我想要的。您的 DM 软件版本是多少?在我的 DM 软件中,“EXAMPLE SCRIPTS”下面只有“Tag Types”
    • @together 是的,我知道。示例部分在 GMS 3 和更新的版本中进行了很多修改/扩展。我的评论也不是为了阻止人们在这里提问——即使这些例子在帮助文档中——而是为那些不知道的人提供有例子的信息。就我个人而言,我认为在 SE 上提问非常棒,因为它使信息“可在 Google 上使用”并公开,因此请在您有任何问题时继续这样做。
    猜你喜欢
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 2013-07-04
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多