ImageJ脚本:如何向现有imag添加一个图像

2024-10-01 09:17:33 发布

您现在位置:Python中文网/ 问答频道 /正文

在斐济(ImageJ),我打开了两张图片(Img1和Img2)。我想运行一个脚本,添加两个图像并将结果存储在Img1中。我将在一系列的图像中做这个,所以我想尽量避免创建和关闭许多图像。在

这有可能吗?我尝试了下面的代码,但是当我在第一个AddSlice()调用之后调用第二个Sum3and50.show()时,它崩溃了。基本上,我希望能够Sum3and50+=imp[Slice]

from __future__ import division
from ij import IJ
from ij import plugin
import time

def AddSlice(Stack,SumImg,Slice):
    Stack.setSlice(Slice)
    ic = plugin.ImageCalculator()
    SliceImg = ic.run("Copy create", Stack, Stack)
    SliceImg.show()
    time.sleep(SLEEP_TIME)  
    SumImg=ic.run("Add RGB", SumImg, SliceImg)
    return SumImg

SLEEP_TIME=1 #seconds    

#imp = IJ.getImage()
imp = IJ.openImage("http://imagej.nih.gov/ij/images/flybrain.zip");
W,H,NCh,NSl,NFr = imp.getDimensions()
imp.show()
Sum3and50 = IJ.createImage("Sum3and50", "RGB black", W, H, 1)
Sum3and50.show()
time.sleep(SLEEP_TIME)  

Sum3and50 = AddSlice(imp,Sum3and50,3)
Sum3and50.show()
time.sleep(SLEEP_TIME)  

Sum3and50 = AddSlice(imp,Sum3and50,5)
Sum3and50.show()

Tags: from图像importtimestackshowslicesleep
1条回答
网友
1楼 · 发布于 2024-10-01 09:17:33

为了避免弹出窗口,我倾向于避免插件,直接使用ImageProcessor。这样一个函数将覆盖第一个输入的两个图像的每个像素对的总和如下:

def pixel_pair_sum(pro1, pro2):
    for x in range(pro1.getWidth()):
        for y in range(pro1.getHeight()):
            v1 = pro1.get(x, y)
            v2 = pro2.get(x, y)    
            pro1.set(x, y, v1 + v2)

pro1和{}是ImageProcessors[1]。 因此,在调用上面的函数之前,您需要先从ImagePlus获取这些值:

^{pr2}$

供参考:https://imagej.nih.gov/ij/developer/api/ij/ImageStack.html
[1] https://imagej.nih.gov/ij/developer/api/ij/process/ImageProcessor.html
[2] 另请参见:https://imagej.nih.gov/ij/developer/api/ij/ImagePlus.html#setPositionWithoutUpdate-int-int-int-

相关问题 更多 >