yzhacm
路人甲
路人甲
  • 注册日期2005-03-02
  • 发帖数20
  • QQ
  • 铜币247枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2436回复:2

[原创]使用SUSAN算法提取特征点(IDL)

楼主#
更多 发布于:2008-03-09 17:08
<P>;-------------------------------------------<BR>;使用SUSAN算法提取边缘或特征点</P>
<P>;-------------------------------------------</P>
<P>;参考 章毓晋:图像处理第二版(中册)</P>
<P>;image:输入的原始图像<BR>;T:灰度差阈值<BR>;P:面积百分比阈值0-1</P>
<P>function Susan,image,T=t,P=p</P>
<P><BR>IF N_Elements(T) eq 0 THEN T=25.0<BR>IF N_Elements(P) eq 0 THEN P=0.75<BR>image=float(image)<BR>mask=fltarr(36) ;定义圆形模板</P>
<P>imgSize = Size(image, /Dimensions)<BR>xsize=imgSize[0]<BR>ysize=imgSize[1]</P>
<P>result=fltarr(xsize,ysize)</P>
<P>G=P*36 ;模板共有36个像素</P>
<P>for i=3,xsize-4 do begin<BR>   for j=3,ysize-4 do begin<BR>    s=0<BR>    mask[0]=image[i-1,j+3] ; mask[1]=image[i,j+3] ; mask[2]=image[i+1,j+3]<BR>    mask[3]=image[i-2,j+2] ; mask[4]=image[i-1,j+2] ; mask[5]=image[i,j+2] ; mask[6]=image[i+1,j+2] ;mask[7]=image[i+2,j+2]<BR>    mask[8]=image[i-3,j+1] ; mask[9]=image[i-2,j+1] ; mask[10]=image[i-1,j+1] ; mask[11]=image[i,j+1] ; mask[12]=image[i+1,j+1] ;mask[13]=image[i+2,j+1] ; mask[14]=image[i+3,j+1]<BR>    mask[15]=image[i-3,j] ; mask[16]=image[i-2,j] ; mask[17]=image[i-1,j] ; mask[18]=image[i+1,j] ;mask[19]=image[i+2,j] ; mask[20]=image[i+3,j]<BR>    mask[21]=image[i-3,j-1] ; mask[22]=image[i-2,j-1] ; mask[23]=image[i-1,j-1] ; mask[24]=image[i,j-1] ; mask[25]=image[i+1,j-1] ;mask[26]=image[i+2,j-1] ; mask[27]=image[i+3,j-1]<BR>    mask[28]=image[i-2,j-2] ; mask[29]=image[i-1,j-2] ; mask[30]=image[i,j-2] ; mask[31]=image[i+1,j-2] ;mask[32]=image[i+2,j-2]<BR>    mask[33]=image[i-1,j-3] ; mask[34]=image[i,j-3] ; mask[35]=image[i+1,j-3]</P>
<P>    for k=0,35 do begin<BR>     if abs(mask[k]-image[i,j]) lt T then begin<BR>      s=s+1<BR>     endif<BR>    endfor</P>
<P>    if (s lt G) then begin<BR>     result[i,j]=G-s<BR>    endif else begin<BR>     result[i,j]=0<BR>    endelse<BR>   endfor</P>
<P>endfor</P>
<P>return,result</P>
<P>;</P>
<P><BR>end</P>
<P><BR>;--------------------<BR>pro Susan_test<BR>DEVICE, DECOMPOSED=1</P>
<P>; 获取本程序所在文件路径<BR>RootDir = Sourceroot()</P>
<P>file=RootDir+'\susan_test4.bmp'</P>
<P><BR>queryStatus = QUERY_IMAGE(file, imgInfo)<BR>if queryStatus eq 0 then begin<BR>   Result = DIALOG_MESSAGE('参考图像格式不可识别!',/error,title='警告')<BR>   return<BR>endif</P>
<P>if (imgInfo.CHANNELS ne 1) then begin<BR>   Result = DIALOG_MESSAGE('图像格式必须为8bit',/error,title='警告')<BR>   return<BR>endif</P>
<P>imgSize = imgInfo.dimensions<BR>xsize=imgsize[0]<BR>ysize=imgsize[1]<BR>image=READ_IMAGE(file)</P>
<P>resultimg=susan(image,t=20,p=0.5)<BR>print,max(resultimg)<BR>index=where(resultimg ge 18.0,count)<BR>print,count</P>
<P>dims=size(resultimg,/dimensions)<BR>ncol=dims[0]<BR>col_index=index mod ncol ;列数<BR>row_index=index/ncol ;行数</P>
<P>WINDOW, /free, XSIZE = xsize, YSIZE = ysize<BR>TV, image<BR>for i=0,count-1 do begin<BR>   PLOTS,[col_index-2,col_index+2],[row_index,row_index],/DEVICE,color='ff0000'xl<BR>   PLOTS,[col_index,col_index],[row_index-2,row_index+2],/DEVICE,color='ff0000'xl<BR>endfor<BR>end</P>
<P>;*****************************************************8</P>
<P>;;更多内容请访问我的个人博客 hi.baidu.com/yzhglory</P>

喜欢0 评分0
home_xj5460
路人甲
路人甲
  • 注册日期2005-07-12
  • 发帖数65
  • QQ
  • 铜币297枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2008-09-01 11:26
<P>没有人顶帖?</P>
举报 回复(0) 喜欢(0)     评分
yangbin288
路人甲
路人甲
  • 注册日期2005-03-14
  • 发帖数27
  • QQ
  • 铜币170枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2008-09-02 10:58
好的,太感谢了!
举报 回复(0) 喜欢(0)     评分
游客

返回顶部