如何在Matlab中对大图像堆栈进行中值投影

Mar*_*ius 5 matlab image-processing median

我有一大堆800 16位灰度图像,2048x2048px.它们是从一个BigTIFF文件中读取的,整个堆栈几乎不适合我的RAM(8GB).现在我需要进行中位投影.这意味着我想计算所有800帧中每个像素的中位数.Matlab中值函数失败,因为没有足够的内存可以为函数调用复制整个数组.什么是计算中位数的有效方法?

我曾尝试使用for循环来计算一次一个像素的中位数,但这仍然非常慢.

Jon*_*nas 4

正如@Shai 建议的那样,迭代块可能是最直接的解决方案。如果您经常遇到此问题,您可能需要考虑将图像转换为 mat 文件,以便您可以直接从磁盘访问像素作为 nd 数组。

%# convert to mat file
matObj = matfile('dest.mat','w');
matObj.data(2048,2048,numSlices) = 0; 
for t = 1:numSlices
    matObj.data(:,:,t) = imread(tiffFile,'index',t);
end

%# load a block of the matfile to take median (run as part of a loop)
medianOfBlock = median(matObj.data(1:128,1:128,:),3);
Run Code Online (Sandbox Code Playgroud)