Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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
在python中计算图像列表的绿色与红色信号强度之比_Python_Python 3.x_Image Processing_Scikit Image - Fatal编程技术网

在python中计算图像列表的绿色与红色信号强度之比

在python中计算图像列表的绿色与红色信号强度之比,python,python-3.x,image-processing,scikit-image,Python,Python 3.x,Image Processing,Scikit Image,我需要计算每幅图像在包含100幅图像的时间间隔内的绿/红信号比率。这些比率需要以与图像相同的顺序绘制(即随时间)。到目前为止,我可以获得单个图像的每个信号的值,但是我在获取图像列表的值以及在python中以一致的方式绘制数据方面遇到了困难 对于单个图像,我使用了以下内容: from PIL import Image import scipy.stats as ss import matplotlib.pyplot as plt im = np.array(Image.open("my_imag

我需要计算每幅图像在包含100幅图像的时间间隔内的绿/红信号比率。这些比率需要以与图像相同的顺序绘制(即随时间)。到目前为止,我可以获得单个图像的每个信号的值,但是我在获取图像列表的值以及在python中以一致的方式绘制数据方面遇到了困难

对于单个图像,我使用了以下内容:

from PIL import Image
import scipy.stats as ss
import matplotlib.pyplot as plt

im = np.array(Image.open("my_image.tif"))

red = im[:,:,0]
green = im[:,:,1]
plt.hist(red.ravel())
plt.hist(green.ravel())

如有任何建议,将不胜感激。我是python新手,请原谅我的无能

不确定您是否只需要一个方法来获得答案,或者您是否已使用Python解决方案。无论如何,似乎没有任何Python解决方案即将推出,因此我将演示一种非常简单的方法,使用ImageMagick获取答案,该方法安装在大多数Linux发行版上,适用于macOS和Windows

基本上,我只是在终端中,从ImageMagick套件运行
convert

我加载一幅图像,并获得ImageMagick以计算红色像素的平均值(
mean.r
)除以绿色像素的平均值(
mean.g
):

现在,如果我想为所有文件获取相同的统计数据,我会再次执行相同的操作,但会加载所有图像,并在每个结果前面加上文件名(
%f
),如下所示:

convert Stack*.tif -format "%f %[fx:mean.r/mean.g]\n" info:
convert StackOf29.tif -format "%s %[fx:mean.r/mean.g]\n" info: > ratios.dat
gnuplot < plot.cmd
输出

Stack0000.tif 0.715659
Stack0001.tif 0.704214
Stack0002.tif 0.710086
Stack0003.tif 0.711458
Stack0004.tif 0.715423
Stack0005.tif 0.715327
Stack0006.tif 0.720593
Stack0007.tif 0.719039
Stack0008.tif 0.725973
Stack0009.tif 0.730682
Stack0010.tif 0.731558
Stack0011.tif 0.769168
Stack0012.tif 0.808623
Stack0013.tif 0.863428
Stack0014.tif 0.952388
Stack0015.tif 1.02525
Stack0016.tif 1.09869
Stack0017.tif 0.857375
Stack0018.tif 1.24331
Stack0019.tif 1.18171
Stack0020.tif 1.10395
Stack0021.tif 1.07511
Stack0022.tif 1.05641
Stack0023.tif 1.04386
Stack0024.tif 1.03314
Stack0025.tif 1.02554
Stack0026.tif 1.02284
Stack0027.tif 1.02046
Stack0028.tif 1.01807

请注意,如果您将所有图像放在一个由29页多页TIFF组成的大堆栈中,则您将使用“场景编号”(
%s
)而不是文件名(
%f
):


如果您想绘制它,您可以像这样使用
gnuplot

convert Stack*.tif -format "%f %[fx:mean.r/mean.g]\n" info:
convert StackOf29.tif -format "%s %[fx:mean.r/mean.g]\n" info: > ratios.dat
gnuplot < plot.cmd

不确定您是否只需要一个方法来获得答案,或者您是否已使用Python解决方案。无论如何,似乎没有任何Python解决方案即将推出,因此我将演示一种非常简单的方法,使用ImageMagick获取答案,该方法安装在大多数Linux发行版上,适用于macOS和Windows

基本上,我只是在终端中,从ImageMagick套件运行
convert

我加载一幅图像,并获得ImageMagick以计算红色像素的平均值(
mean.r
)除以绿色像素的平均值(
mean.g
):

现在,如果我想为所有文件获取相同的统计数据,我会再次执行相同的操作,但会加载所有图像,并在每个结果前面加上文件名(
%f
),如下所示:

convert Stack*.tif -format "%f %[fx:mean.r/mean.g]\n" info:
convert StackOf29.tif -format "%s %[fx:mean.r/mean.g]\n" info: > ratios.dat
gnuplot < plot.cmd
输出

Stack0000.tif 0.715659
Stack0001.tif 0.704214
Stack0002.tif 0.710086
Stack0003.tif 0.711458
Stack0004.tif 0.715423
Stack0005.tif 0.715327
Stack0006.tif 0.720593
Stack0007.tif 0.719039
Stack0008.tif 0.725973
Stack0009.tif 0.730682
Stack0010.tif 0.731558
Stack0011.tif 0.769168
Stack0012.tif 0.808623
Stack0013.tif 0.863428
Stack0014.tif 0.952388
Stack0015.tif 1.02525
Stack0016.tif 1.09869
Stack0017.tif 0.857375
Stack0018.tif 1.24331
Stack0019.tif 1.18171
Stack0020.tif 1.10395
Stack0021.tif 1.07511
Stack0022.tif 1.05641
Stack0023.tif 1.04386
Stack0024.tif 1.03314
Stack0025.tif 1.02554
Stack0026.tif 1.02284
Stack0027.tif 1.02046
Stack0028.tif 1.01807

请注意,如果您将所有图像放在一个由29页多页TIFF组成的大堆栈中,则您将使用“场景编号”(
%s
)而不是文件名(
%f
):


如果您想绘制它,您可以像这样使用
gnuplot

convert Stack*.tif -format "%f %[fx:mean.r/mean.g]\n" info:
convert StackOf29.tif -format "%s %[fx:mean.r/mean.g]\n" info: > ratios.dat
gnuplot < plot.cmd



您能描述一下或更好地描述一下理想输出的外观吗?理想输出是一个按时间顺序排列的比率列表(根据图像序列),我可以用它生成折线图来计算信号衰减曲线等。一个TIF中的100帧是吗?你能分享这张图片吗?嗨,马克,这些帧最初是在一个tif中,但为了便于使用,我已经分割了这些场景。可以在此处找到具有较短图像序列的文件:谢谢您的帮助!你能描述一下,或者更好地描述一下你的理想输出是什么样子的吗?理想输出是一个按时间顺序排列的比率列表(根据图像序列),我可以用它生成折线图来计算信号衰减曲线等。一个TIF中的100帧是吗?你能分享这张图片吗?嗨,马克,这些帧最初是在一个tif中,但为了便于使用,我已经分割了这些场景。可以在此处找到具有较短图像序列的文件:谢谢您的帮助!你好,马克。非常感谢你。我安装了Magick,它可以从我的命令行运行。我之所以选择python,是因为我已经熟悉了SciPy,并希望最终为我的所有时间点运行一个脚本,并设法绘制信号衰减曲线和所有时间点。ImageMagick目前似乎运行良好,直到我找到更强大的功能遇到标记为50839(0xc697)的未知字段`TIFFReadDirectory'@warning/tiff.c/TIFFWarnings/921。我不在电脑旁,但请尝试
-安静
选项或搜索
-定义tiff:忽略标记
或类似的。Hi Mark。非常感谢你。我安装了Magick,它可以从我的命令行运行。我之所以选择python,是因为我已经熟悉了SciPy,并希望最终为我的所有时间点运行一个脚本,并设法绘制信号衰减曲线和所有时间点。ImageMagick目前似乎运行良好,直到我找到更强大的功能遇到标记为50839(0xc697)的未知字段`TIFFReadDirectory'@warning/tiff.c/TIFFWarnings/921。我不在电脑旁,但请尝试
-quiet
选项或搜索
-define tiff:ignore tags
或诸如此类的内容。谢谢Stefan,这真的很有帮助!将它应用到我的更大的数据集,效果非常好。是否可以一次读取多个集合(每个集合都有一个timelapse图像的单独文件)?如果您有存储多个图像的TIFF文件,这当然是可能的。多页TIFF被读入形状数组
(pages,M,N,3)
,因此您可以在图像本身的页面上迭代,而不仅仅是在ic上:
images=io.ImageCollection('*.tif');比率=[[page[…,0]。平均值()/page[…,1]。图像中的页面的平均值()]ic中的图像的平均值]
。虽然这似乎可行,但我在输出方面遇到了一些问题。是否将新打印范围设置为文件中的页数?目前,当读取5个文件(每个文件包含200页)时,绘图仅生成5个间隔。我需要这个图来显示整个2小时内的比率