資源簡介
用于立體視覺匹配,采用基于窗口的SAD作為相關測度,窗口大小可以改變,程序采用C語言編寫。

代碼片段和文件信息
#include
#include
#include
#define?w?384
#define?h?288
#define?DpMax?16
#define?WinR?2
#define?ff(ij)?ip[(i)*w+(j)]
#define?gg(ij)?jp[(i)*w+(j)]
#define?hh(ij)?presult[(i)*w+(j)]
typedef?unsigned?char?uchar;
int?SAD(int?aint?bint?cuchar?*?ipuchar?*jp);
void?Parallax(uchar?*?pluchar?*?pruchar?*?presult);
void?main()
{
FILE?*?fp1*?fp2*?fp3;
uchar?*?pimgr*?pimgl*pimgresult;??
/*
**讀取文件指針pimglpimgr
*/
pimgr=(uchar*)malloc(w*h*sizeof(uchar));
pimgl=(uchar*)malloc(w*h*sizeof(uchar));
????pimgresult=(uchar*)malloc(w*h*sizeof(uchar));
fp1=fopen(“right.raw““rb“);
if(fp1==NULL)
{
printf(“打開文件right.raw失敗/n“);
exit(0);
}
fp2=fopen(“left.raw““rb“);
????if(fp2==NULL)
{
printf(“打開文件left.raw失敗/n“);
exit(0);
}
fp3=fopen(“result1.raw““wb“);
????if(fp3==NULL)
{
printf(“打開文件result1.raw失敗/n“);
exit(0);
}
fread(pimgrw*hsizeof(uchar)fp1);
fread(pimglw*hsizeof(uchar)fp2);
????Parallax(pimglpimgrpimgresult);
????fwrite(pimgresult(w*h)sizeof(uchar)fp3);
fclose(fp1);
fclose(fp2);
fclose(fp3);
}?
int?SAD(int?aint?bint?cuchar?*?ipuchar?*?jp)/*計算SAD函數*/
{
int?ijsum=0;
????int?w1w2;
for(i=-WinR;i<=WinR;i++)
for(j=-WinR;j<=WinR;j++)
{
w1=(int)ff(i+aj+b);
w2=(int)gg(i+aj+c);
sum=sum+abs(w1-w2);
}
return(sum);
}
void?Parallax(uchar?*?pluchar?*?pruchar?*?presult)/*畫出視差圖*/
{
int?ijksadmind;
for(i=WinR;i for(j=WinR;j {
/*求出與對應點之間距離d*/
for(k=0;k {
if(k+j>=w)break;
sad=SAD(ijk+jprpl);
if(k==0)
{
min=sad;d=k;
}
else
{
if(sad {
min=sad;d=k;
}
}
}
/*將距離d作為灰度值輸入到圖result1.raw中*/
hh(ij)=(uchar)(d*(int)(256/DpMax));
}
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????1909??2018-06-02?22:23??alterwindow.cpp
- 上一篇:CAN總線源代碼c語言
- 下一篇:人工智能——水壺問題
評論
共有 條評論