Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dm script 如何在DM脚本中设置直线投影的起点和终点_Dm Script - Fatal编程技术网

Dm script 如何在DM脚本中设置直线投影的起点和终点

Dm script 如何在DM脚本中设置直线投影的起点和终点,dm-script,Dm Script,我试图画一幅图像的直线投影。sy/2下方代码中的第4行表示投影长度,此处为半图像范围。但是如何用脚本设置起点或终点呢?例如,我想画线投影,从1/4图像范围到3/4图像范围。有什么建议吗 image src := getfrontimage() number sx,sy src.GetSize(sx,sy) image line_projection := RealImage( "Vertical", 4, sy/2 ) line_projection[irow,0] += s

我试图画一幅图像的直线投影。sy/2下方代码中的第4行表示投影长度,此处为半图像范围。但是如何用脚本设置起点或终点呢?例如,我想画线投影,从1/4图像范围到3/4图像范围。有什么建议吗

image src := getfrontimage()
number sx,sy
src.GetSize(sx,sy)
image line_projection := RealImage( "Vertical", 4, sy/2 )
line_projection[irow,0] += src
line_projection *= 1/sx

可以使用切片仅查看感兴趣的图像区域。使用img[y1,x1,y2,x2]将源剪辑到感兴趣的部分

image src:=getFrontImage; 数字宽度、高度; src.GetSizewidth,高度; 数字起点y=1/4*高度; 数字末端y=3/4*高度; 图像线投影:=RealImageVertical,4,宽度; 直线投影[icol,0]+=src[start_y,0,end_y,width]; 直线投影*=1/高度/2; line_projection.ShowImage;
可以使用切片仅查看感兴趣的图像区域。使用img[y1,x1,y2,x2]将源剪辑到感兴趣的部分

image src:=getFrontImage; 数字宽度、高度; src.GetSizewidth,高度; 数字起点y=1/4*高度; 数字末端y=3/4*高度; 图像线投影:=RealImageVertical,4,宽度; 直线投影[icol,0]+=src[start_y,0,end_y,width]; 直线投影*=1/高度/2; line_projection.ShowImage;
当使用内部变量icol、irow,。。。由于迭代求和是GMS 1中的快速方法,这对于使用多线程代码的较新版本不再适用,如下例所示:

//对图像的一部分求和的各种方法 编号sx=4096,sy=4096 数字startx=0.2,starty=0.2 数字endx=0.8,endy=0.4 //切割坐标 数字t=truncstarty*sy,l=truncstartx*sx,b=truncendy*sy,r=truncendx*sx 图像测试:=真实图像测试,4,sx,sy 测试=sin-icol/iwidth*20*Pi+cos-itheta*iradius/iwidth*50 测试=sin-icol/iwidth*20*Pi test.ShowImage ROI标记=新ROI marker.ROISetLabel部分 标记:t、l、b、r marker.0 test.ImageGetImageDisplay0.ImageDisplayAddRoi标记 //OKDALOG正在使用各种方法执行垂直求和。 数字h=b-t 数字w=r-l 明确结果 编号ts、te、tps=GetHighRestickPersecond //使用内在变量 镜像sumImg1:=实镜像和内部,4,w ts=GetHighResTickcount sumImg1[icol,0]+=测试[t,l,b,r]; te=GetHighResTickcount sumImg1.ShowImage 结果\n使用内部变量求和:+te ts/tps+sec //用于切片的循环 图像sumImg2:=带切片的真实图像和,4,w ts=GetHighResTickcount
对于数字i=0;当使用内在变量icol,irow,。。。由于迭代求和是GMS 1中的快速方法,这对于使用多线程代码的较新版本不再适用,如下例所示:

//对图像的一部分求和的各种方法 编号sx=4096,sy=4096 数字startx=0.2,starty=0.2 数字endx=0.8,endy=0.4 //切割坐标 数字t=truncstarty*sy,l=truncstartx*sx,b=truncendy*sy,r=truncendx*sx 图像测试:=真实图像测试,4,sx,sy 测试=sin-icol/iwidth*20*Pi+cos-itheta*iradius/iwidth*50 测试=sin-icol/iwidth*20*Pi test.ShowImage ROI标记=新ROI marker.ROISetLabel部分 标记:t、l、b、r marker.0 test.ImageGetImageDisplay0.ImageDisplayAddRoi标记 //OKDALOG正在使用各种方法执行垂直求和。 数字h=b-t 数字w=r-l 明确结果 编号ts、te、tps=GetHighRestickPersecond //使用内在变量 镜像sumImg1:=实镜像和内部,4,w ts=GetHighResTickcount sumImg1[icol,0]+=测试[t,l,b,r]; te=GetHighResTickcount sumImg1.ShowImage 结果\n使用内部变量求和:+te ts/tps+sec //用于切片的循环 图像sumImg2:=带切片的真实图像和,4,w ts=GetHighResTickcount
对于数字i=0;我相信你在例子中混淆了一些坐标。对于垂直总和,图像应为宽度大小,迭代应通过icol now irow。此外,GMS中表示点的符号为img[x,y],表示面积的符号为img[y1,x1,y2,x2]。我知道,这很奇怪,但它是在上/左/下/右下角提名之后历史上发展起来的符号。使用命令'slice2'可以避免[t,l,b,r]符号。这一命令更加明确。除了,它假设图像是3D的,所以您需要指定三个起始点坐标“sliceN”是最清晰,但也是最详细的命令,指定了输入和输出维度。你是对的。谢谢你指出这一点。我用了这个例子,只改变了一些部分。我用一个噪声图像进行了测试,当方向错误时,它显然不会显示错误。我相信你在例子中混淆了一些坐标。对于垂直总和,图像应为宽度大小,迭代应通过icol now irow。此外,GMS中表示点的符号是img[x,y],但表示img[y1,x1,y2,x2
]对于区域。我知道,这很奇怪,但它是在上/左/下/右下角提名之后历史上发展起来的符号。使用命令'slice2'可以避免[t,l,b,r]符号。这一命令更加明确。除了,它假设图像是3D的,所以您需要指定三个起始点坐标“sliceN”是最清晰,但也是最详细的命令,指定了输入和输出维度。你是对的。谢谢你指出这一点。我用了这个例子,只改变了一些部分。我测试了一个噪声图像,当方向错误时,它显然不会显示错误。