Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
初级会员
注册日期: 2012-03-06
住址: 北京海淀
帖子: 2
声望力: 0 ![]() |
![]()
本人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 ![]() 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 麻烦大家了~ ![]() |
![]() |
![]() |
![]() |
#2 |
初级会员
注册日期: 2012-03-06
住址: 北京海淀
帖子: 2
声望力: 0 ![]() |
![]()
上面的代码有一点错,这里是更改的版本,问题不变:
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 |
![]() |
![]() |