Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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
Image 如何处理大量图像';像素值是否有效?_Image_Programming Languages_Wolfram Mathematica_Average_Addition - Fatal编程技术网

Image 如何处理大量图像';像素值是否有效?

Image 如何处理大量图像';像素值是否有效?,image,programming-languages,wolfram-mathematica,average,addition,Image,Programming Languages,Wolfram Mathematica,Average,Addition,读完后,我想做一些自己的研究,看看我的相机是否有某种指纹。我想尝试的第一个想法是从我的相机上平均拍摄几百到几千张照片,然后制作一张其像素值是每个图像中每个对应像素的平均值的照片。如果存在某种失真,例如,一个像素感觉到光线比它应该感觉到的强1/256,那么它可以被显示出来 操作如此大量的数据的有效方法是什么?我欢迎各种各样的软件和语言 我曾经在Mathematica中使用ImageData[image]函数将图像转换为像素值数组,然后将ImageData[image]相加并平均,然后使用Image

读完后,我想做一些自己的研究,看看我的相机是否有某种指纹。我想尝试的第一个想法是从我的相机上平均拍摄几百到几千张照片,然后制作一张其像素值是每个图像中每个对应像素的平均值的照片。如果存在某种失真,例如,一个像素感觉到光线比它应该感觉到的强1/256,那么它可以被显示出来

操作如此大量的数据的有效方法是什么?我欢迎各种各样的软件和语言


我曾经在Mathematica中使用ImageData[image]函数将图像转换为像素值数组,然后将ImageData[image]相加并平均,然后使用ImageData[image]函数将数组转换回图像,但过程似乎太慢。

因为我在评论中提到过,事实证明,
ImageAdd
与对imagedata求和没有太大区别:

 images =  
     Select[ExampleData /@ ExampleData["TestImage"] ,
       ImageDimensions[#] == {512, 512} && 
       ImageColorSpace[#] == "RGB" & ] ;   
 images = Flatten@Table[ images, {10} ];
 n = Length[images];
 (sum = ImageMultiply[ images[[1]] , 1/n ];
 (sum = ImageAdd[sum, ImageMultiply[ #, 1/n ]]) & /@ images[[2;;]];)
     // AbsoluteTiming (* {0.842362, Null} *)
 sum2 = (Total@(ImageData /@ images ))/n; 
     // AbsoluteTiming (* {0.873561, Null} *)
请注意,无论哪种方式,我们都在~1秒内对80张图像求和。我猜你真正的瓶颈在于导入操作(我认为C会赢)

在这种情况下,我将坚持对
ImageData
求和
ImageData
进行了某种形式的剪裁/规范化,但没有很好的文档记录(因此使用了
ImageMultiply
技巧-这会花费您一些时间,但不会像add那样多)

读取文件 尝试以下方法加载和汇总一组文件:

 filenames = FileNames["*.jpg",fullpath];
 sum = Total@(ImageData[Import[#]] & /@ filenames)/Length[filenames];
 Image[sum]

注意,如果文件的大小和颜色不完全相同,这将中断。

ImageAdd
可能会更快,但我猜几乎任何编译语言都会让mathematica崩溃。我真的不认为这会起作用,但是,你需要按照他们在文章中说的去做,看看一些高度统一的图像。我要测试@george的猜测,一种编译语言会把Mathematica吹走。我天真地希望Mathematica使用C(或C++或其他编译语言)编写的例程来实现你想要的功能,如果你避开符号运算,Mathematica的速度往往是足够快的。考虑到至少一小时,你会发现并找出一个C++(或你最喜欢的语言)库,Mathematica可能会在你开始使用更快的代码之前撕下几千张图像。吹走可能是一个很强的,而且你是正确的,对于一次性的项目,我每次都会使用Mathematica。一点点性能提升并不值得花上数小时/天来编写c代码。我没有对Mathematica编程做过广泛的研究,我可能尝试过一种低效的方法:Image[(ImageData[//将我的第一幅图像,即1.8 MB 3648*2736 jpg从explorer拖到Mathematica,大约需要5秒时间]+ImageData[第二幅图像]+ImageData[第三张图片]+ImageData[第四张图片]+ImageData[第五张图片]/5]。对于五张图片,计算五张图片的平均值大约需要10秒。