harris 演算法的python實現,harrispython

來源:互聯網
上載者:User

harris 演算法的python實現,harrispython

harris 作為最常用的特徵點檢測演算法。

     第一個檔案harris.py

<pre name="code" class="python">from scipy.ndimage import filtersfrom numpy import *from pylab import *def compute_harris_response(im,sigma=3):    imx=zeros(im.shape)#計算導數    filters.gaussian_filter(im,(sigma,sigma),(0,1),imx)    imy=zeros(im.shape)    filters.gaussian_filter(im,(sigma,sigma),(1,0),imy)    Wxx=filters.gaussian_filter(imx*imx,sigma)   #計算harris矩陣分量       Wxy=filters.gaussian_filter(imx*imy,sigma)    Wyy=filters.gaussian_filter(imy*imy,sigma)    Wdet=Wxx*Wyy-Wxy**2    #計算矩陣的特徵值和跡    Wtr=Wxx+Wyy    return  Wdet/Wtrdef get_harris_points(harrisim,min_dist=10,threshold=0.1):    conner_threshold=harrisim.max()*threshold    harrisim_t=(harrisim>conner_threshold)*1        coords=array(harrisim_t.nonzero()).T    candidate_values=[harrisim[c[0],c[1]] for c in coords]    index=argsort(candidate_values)    allowed_locations=zeros(harrisim.shape)    allowed_locations[min_dist:-min_dist,min_dist:-min_dist]=1    filtered_coords=[]    for i in index:        if allowed_locations[coords[i,0],coords[i,1]]==1:            filtered_coords.append(coords[i])            allowed_locations[(coords[i,0]-min_dist):(coords[i,0]+min_dist),(coords[i,1]-min_dist):(coords[i,1]+min_dist)]=0#此處保證min_dist*min_dist只有一個harris特徵點    return filtered_coordsdef plot_harris_points(image,filtered_coords):    figure()    gray()    imshow(image)    plot([p[1] for p in filtered_coords],[p[0]for p in filtered_coords],'+')    axis('off')    show()

第二個檔案測試演算法

from PIL import Imagefrom numpy import *import harrisfrom pylab import *from scipy.ndimage import filtersim=array(Image.open('33.jpg').convert('L'))harrisim=harris.compute_harris_response(im)filtered_coords=harris.get_harris_points(harrisim)harris.plot_harris_points(im,filtered_coords)




用Python怎 實現DES演算法

原創的嘛,自己寫唄。DES安全性沒其他演算法那麼高,應該不會很複雜、
 
Python中prim演算法或kruscal演算法的實現

kruskal:
#include "stdio.h"
#include "stdlib.h"
#include "iostream"
using namespace std;
#define MAXE 100 //MAXE為最大的邊數
struct edges
{
int bv,tv,w; //邊集類型,儲存一條邊的起始頂點bv、終止頂點tv和權w
}edges;
typedef struct edges edgeset[MAXE];
//尋找v所在的連通集
int seeks(int set[],int v)
{
int i=v;
while (set[i]>0)

i=set[i];
return i;
}
void kruskal(edgeset ge,int n,int e)
{
int set[MAXE],v1,v2,i,j;
for(i=1;i<=n;i++)
set[i]=0;
i=1; //i表示待擷取的產生樹中的邊數,初值為1
j=1; //j表示ge中的下標,初值為1
while(j<n&&i<=e)//按邊權遞增順序,逐邊檢查該邊是否應加入到產生樹中
{
v1=seeks(set,ge[i].bv); //確定頂點v所在的連通集
v2=seeks(set,ge[i].tv);
cout<<ge[i].bv<<":"<<v1<<", "<<ge[i].tv<<":"<<v2<<endl;
if(v1!=v2) //當v1,v2不在同一頂點集合,確定該邊應當選入產生樹
{
cout<<"("<<ge[i].bv<<", "<<ge[i].tv<<") "<<ge[i].w<<endl;
set[v1]=v2;
j++;
}
i++;
}
}
int main()
{
edgeset ee;
int n,e; //n是圖的結點數,e是圖的邊數
n=6;
e=3;
for(int i=1;i<=e;i++)
{
scanf_s("%d",&ee[i].bv);
scanf_s("%d",&ee[i].tv);
scanf_s("%d",&ee[i].w);
}
//ee表示的邊集圖是按權值從小到大排列的
printf("最小產生樹邊集及它的權值: \n");
kruskal(ee,n,e);
system(......餘下全文>>
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.