一段matlab程序,Error using ==> conv2 A and B must be full double

问题描述:

一段matlab程序,Error using ==> conv2 A and B must be full double matrices.
中间部分是Gabor小波变换,不用管.主要是这个double的问题,要怎么改才行?
I=imread('J:\lz\after_hist_0000.bmp');
sigma=2*pi*pi;
if isa(I,'double')~=1
I=double(I);
end
figure(6);
j=1;
for v=0:2
for u=0:5
k=pi*exp(-(v+2)/2*log(2));
q=u*pi/8;
for x=-16:16 %改变x,y的窗口大小,进行效果的比对.
for y=-16:16
tmp1=exp(-(k.*k*(x^2+y^2))/(2*sigma));
tmp2=cos(k*x*cos(q)+k*y*sin(q))-exp(-sigma/2);
tmp3=sin(k*x*cos(q)+k*y*sin(q))-exp(-sigma/2);
realpart(17+x,17+y)=tmp1*tmp2*k^2/sigma;
imagpart(17+x,17+y)=tmp1*tmp3*k^2/sigma;
end
end
imaggabout1=conv2(I,double(imagpart),'full'); realgabout1=conv2(I,double(realpart),'full');
gaborout1=sqrt(imaggabout1.*imaggabout1+realgabout1.*realgabout1);
gaborout1=255-uint8(gaborout1)
subplot(3,6,j),imshow(gaborout1);
j=j+1;
save gaborout.mat gaborout1 ;
end
end
1个回答 分类:综合 2014-12-06

问题解答:

我来补答
conv2,是对矩阵求协方差,所以realpart和imagpart必须是矩阵,但你这里没有定义.
可以在for循环前面添加这两个矩阵的定义.
realpart(17+16,17+16) = 0.0;
imagpart(17+16,17+16) = 0.0;
for v=0:2
for u=0:5
k=pi*exp(-(v+2)/2*log(2));
q=u*pi/8;
for x=-16:16 %改变x,y的窗口大小,进行效果的比对.
for y=-16:16
tmp1=exp(-(k.*k*(x^2+y^2))/(2*sigma));
tmp2=cos(k*x*cos(q)+k*y*sin(q))-exp(-sigma/2);
tmp3=sin(k*x*cos(q)+k*y*sin(q))-exp(-sigma/2);
realpart(17+x,17+y)=tmp1*tmp2*k^2/sigma;
imagpart(17+x,17+y)=tmp1*tmp3*k^2/sigma;
end
end
 
 
展开全文阅读
剩余:2000