ImageJ宏叠加三角形外接圆时仅第四组生效、圆心重合问题
问题原因
你踩了ImageJ宏参数的命名规则坑:Specify... 命令的坐标参数固定用x和y作为键名,不识别你写的x1/y1、x2/y2、x3/y3这类带数字后缀的参数。
前三次调用时,非法参数会被ImageJ直接忽略,X/Y坐标始终取默认留存值(一般是图像中心),所以三个圆的圆心完全重合。你第四组代码实际运行时应该是用了正确的x/y键名(贴代码时手滑多打了4),参数能被正常解析,所以定位正确。
修正代码
把所有Specify调用里的坐标参数后缀数字删掉,统一用x和y传值即可:
//Circumcircle run("Specify...", "width="+(r1*2)+" height="+(r1*2)+" x="+cenX1+" y="+cenY1+" oval centered"); Overlay.addSelection("cyan"); run("Specify...", "width="+(r2*2)+" height="+(r2*2)+" x="+cenX2+" y="+cenY2+" oval centered"); Overlay.addSelection("yellow"); run("Specify...", "width="+(r3*2)+" height="+(r3*2)+" x="+cenX3+" y="+cenY3+" oval centered"); Overlay.addSelection("magenta"); run("Specify...", "width="+(r4*2)+" height="+(r4*2)+" x="+cenX4+" y="+cenY4+" oval centered"); Overlay.addSelection("red");
排查提示
如果修正参数后仍有位置偏差,在每段Specify调用前加print("圆1 圆心:"+cenX1+","+cenY1+" 半径:"+r1);这类打印语句,先确认你前面计算的外接圆圆心、半径值本身没有错误。
内容的提问来源于stack exchange,提问作者Cleetus
相关产品推荐
相关产品推荐

