gpt4 book ai didi

image - 如何有效地操作大量图像的像素值?

转载 作者:行者123 更新时间:2023-12-05 07:57:58 26 4
gpt4 key购买 nike

看完an article about Fingerprinting in digital cameras ,我想自己做一些研究,看看我的相机是否有某种指纹。我想尝试的第一个想法是对从我的相机拍摄的成百上千张照片取平均值,并制作一张像素值为每张图像中每个对应像素的平均值的照片。如果存在某种失真,例如像素感觉到的光比它应该感觉到的强 1/256,则可以显示出来。

处理大量数据的有效方法是什么?我欢迎各种软件和语言。

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

最佳答案

自从我在评论中提到它后,事实证明 ImageAdd 与对图像数据求和没有太大区别:

 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 张图像求和。我猜你真正的瓶颈在于 Import 操作(这是我认为“C”会胜出的地方)

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

读取文件

试试这个来加载和汇总一堆文件:

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

请注意,如果文件的大小和颜色类型不同,这将会中断。

关于image - 如何有效地操作大量图像的像素值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25978020/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com