返回信息流下面的代码见过,但不知道其理论意义,望达人指点一下,可以的话推荐一两个论文,谢谢!!!
clear all;
load wbarb;
I = ind2gray(X,map);imshow(I);
I1 = imadjust(I,stretchlim(I),[0,1]);figure;imshow(I1);
[N,M] = size(I);
h = [0.125,0.375,0.375,0.125];
g = [0.5,-0.5];
delta = [1,0,0];
J = 3;
a(1:N,1:M,1,1:J+1) = 0;
dx(1:N,1:M,1,1:J+1) = 0;
dy(1:N,1:M,1,1:J+1) = 0;
d(1:N,1:M,1,1:J+1) = 0;
a(:,:,1,1) = conv2(h,h,I,'same');
dx(:,:,1,1) = conv2(delta,g,I,'same');
dy(:,:,1,1) = conv2(g,delta,I,'same');
x = dx(:,:,1,1);
y = dy(:,:,1,1);
d(:,:,1,1) = sqrt(x.^2+y.^2);
I1 = imadjust(d(:,:,1,1),stretchlim(d(:,:,1,1)),[0 1]);figure;imshow(I1);
这是一条镜像帖。来源:北邮人论坛 / ml-dm / #2158同步于 2008/5/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ML_DM机器人发帖
边缘检测的代码,求达人解释一下理论意义,谢谢!!!
luoye
2008/5/26镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
[QUOTE]
clear all;
load wbarb;
I = ind2gray(X,map);imshow(I);
I1 = imadjust(I,stretchlim(I),[0,1]);figure;imshow(I1);
[N,M] = size(I);
h = [0.125,0.375,0.375,0.125];
g = [0.5,-0.5];
delta = [1,0,0];
J = 3;
a(1:N,1:M,1,1:J+1) = 0;
dx(1:N,1:M,1,1:J+1) = 0;
dy(1:N,1:M,1,1:J+1) = 0;
d(1:N,1:M,1,1:J+1) = 0;
a(:,:,1,1) = conv2(h,h,I,'same');
dx(:,:,1,1) = conv2(delta,g,I,'same');
dy(:,:,1,1) = conv2(g,delta,I,'same');
x = dx(:,:,1,1);
y = dy(:,:,1,1);
d(:,:,1,1) = sqrt(x.^2+y.^2);
I1 = imadjust(d(:,:,1,1),stretchlim(d(:,:,1,1)),[0 1]);figure;imshow(I1);
[/QUOTE]
恩,SIFT角点检测的前一部分就是这么实现的
首先先载入图像
[QUOTE]clear all;
load wbarb; [/QUOTE]
然后,对图像做直方图均匀化
[QUOTE]I1 = imadjust(I,stretchlim(I),[0,1]);[/QUOTE]
再然后构造滤波器
[QUOTE]h = [0.125,0.375,0.375,0.125]; %高斯平滑滤波器(一个方向的)
g = [0.5,-0.5]; %差分滤波
delta = [1,0,0]; %不用管,就是表示方向而已[/QUOTE]
[QUOTE]a(:,:) = conv2(h,h,I,'same');%对图像做平滑滤波,高斯可以理解为高斯平滑,或用低通滤波器滤波,conv2(h,h,***)表示x,y方向均是平滑滤波。去噪用的
dx(:,:) = conv2(delta,g,I,'same'); %x方向的差分
dy(:,:) = conv2(g,delta,I,'same'); %y方向的差分[/QUOTE]
再求梯度的绝对值
[QUOTE]d(:,:) = sqrt(x.^2+y.^2); %求欧式模
I1 = imadjust(d(:,:),stretchlim(d(:,:)),[0 1]);figure;imshow(I1);%在做一次直方图均匀化 [/QUOTE]
高斯滤波和差分滤波合起来一般成为LOG(laplace of gaussian),是最常用的图像预处理方法。很多角点检测的前几步都是做这个。
整个程序的主要意思就是求那些梯度大的地方。很多文章都涉及,可以google一下SIFT,前面就是用这个做的预处理。