【发布时间】:2017-10-26 09:12:30
【问题描述】:
有人知道在 DM 中执行区域增长的更快方法吗? 我有类似于下面示例中的测试图像的粒子图像, 每个粒子在粒子内部具有较小的面积和较低的强度。 我想扩大这些最低强度的区域来满足整个粒子的边界。 该脚本使用膨胀和 如果一个人把 x = 1024 或 2048,它已经太慢了....
编辑:
我事先知道 seg 图像。但我看不到一个人如何达到目的 使用简单的 tert() 命令得到结果,因为不同的粒子具有不同的值。子区域的想法可能会奏效,这将需要粒子计数。有一个菜单命令“分析粒子”可以做到这一点,但怎么能 这可以快速完成脚本吗? 这是一个实际的例子:
(External Link for full res TIF (DropBox))
例如,最大的粒子将具有完整的值 29,即该粒子中的最小数字。 我还编辑了代码以使用正面图像。
// $BACKGROUND$
image front:=getfrontimage()
image newfront = front
number x,y,i,su,su1,val=14,ok=1,count = 0,min,max,z,j,mmax=0
getsize(front,x,y)
image seg := binaryimage("",x,y)
image new := binaryimage("",x,y)
image mp:= binaryimage("",x,y)
minmax(front,min,max)
image front1 = front
seg=tert(front1>0,1,0)
for(i=1;i<=max;i++)
{
new=tert(front1==i,1,0)
su = sum(new)
result(" int "+i+" of "+max+" \n")
while(ok)
{
mp = MPdilate( new ,7)
mp = mp*seg
if(sum(mp)==su) ok=0
su = sum(mp)
count++
new=mp
}
ok=1
front1 = tert(new>0,i,front1)
}
showimage(front1)
【问题讨论】:
-
我是否理解正确,只要强度更高,您基本上想从种子中填充?我不确定我是否正确理解您的算法想要实现的目标(在存在噪声的情况下)以及“边界条件”是什么。在您的示例图像中,因为简单的 tert() 阈值处理会导致最终结果......(为了清晰起见,您可能希望在帖子中添加真实图像。)
-
无论如何,脚本中不会有“区域增长”命令,所以这更像是一个算法问题而不是编码问题。一旦明确了任务是什么,我们仍然可以讨论更有效的做事方式。
-
我不清楚的是:您是否知道确切的(几何)边界(即您的“seg”图像)?因为,显然,如果你“只是”想填补已知“seg”图像中的漏洞,任务就不同了。
-
顺便说一句,加速您自己的算法的一个明显方法是首先找到您的粒子的“子区域”,然后只在这个子图像上使用迭代扩张,而不是在整个子图像上。跨度>
-
嗨,“唐,我”,当您在 StackOverflow 上“回答”cmets 时,请务必写一条评论,指出您要回答的人(使用 @username 向人们)。主帖中的编辑不会自动“显示”在主列表中,并且很容易被遗漏。我现在才看到您从 10 月 28 日开始的编辑。我现在没时间了,等我有时间再回来。
标签: dm-script