PDA

查看完整版本 : [MATLAB图像处理] 三维图像处理的基础问题


Cuky
2012-03-06, 15:29
本人matlab初学,所以很多函数不太熟悉。
现在的处理对象是一个三维的图像,也就是一个三维的大矩阵,现在的算法大致是:将矩阵中每一个体素看做一个小正方形的左上角,然后依次从原数据矩阵中取出,进行DCT变换,经过一定的处理之后在放回原位。

我想到了matlab自带的imfilter函数,但是不知道它怎么做到高效率的,现在我的程序中for循环太多,导致速度极慢……如果硬是要用mex接C的话,我对于C的矩阵运算又不明白了……现在正处于纠结的阶段……

如果有谁有好的想法,在此请教了!非常感谢您!

另外在网上找了读取raw的很多程序,我自己改编了一下使得适合三维图像数据的读取,但是不知道为什么老是报错,而且读出来的图像是二值的图像,元数据是uint16的灰度图像啊……

下面是代码:
function Y = rawread2(char,A)
row = A(1);
col = A(2);
pag = A(3);
Y=zeros(row,col,pag);
y=zeros(row,col);

h = fopen(char,'rb');
%if h ~= 3
% error('failed to open the raw file.')
%end

for i=1:pag
fseek(h,row*col*2*(40-1),'bof');
y = fread(h,[row,col],'uint16');
Y(:,:,i) = y;
end
h = fclose(h);
if h == -1
error('failed to close the file.');
end

end

麻烦大家了~:)

Cuky
2012-03-06, 15:32
上面的代码有一点错,这里是更改的版本,问题不变:
function Y = rawread2(char,A)
row = A(1);
col = A(2);
pag = A(3);
Y=zeros(row,col,pag);
y=zeros(row,col);

h = fopen(char,'rb');
%if h ~= 3
% error('failed to open the raw file.')
%end

for i=1: pag
fseek(h,row*col*2*(i-1),'bof');
y = fread(h,[row,col],'uint16');
Y(:,:,i) = y;
end
h = fclose(h);
if h == -1
error('failed to close the file.');
end

end