圖像轉換 之 方形圖轉化扇形圖

 

核心算法,是用 的那個 cordic 算法..html

http://www.cnblogs.com/signal/archive/2012/11/13/2768140.html算法

這裏主要是想把算法弄到FPGA中去寫的測試代碼...測試

這裏主要是貼關鍵代碼: this

 

void CTestImgDlg::OnImageCordic()
{
// TODO: Add your control notification handler code here
DWORD dwStart = GetTickCount();

int i;
int j;

for (i=0; i<m_HeightSW; i++)
{
for (j=0; j<m_WidthSW; j++)
{
// j = m_WidthSW/2;
int posX = i;
int posY = j;code

BYTE val = this->GetImageCordic(posX,posY);    --開始轉換 
m_pDataSW[i*m_WidthSW + j] = val;orm

}
}

CString str;
str.Format(" %d ", GetTickCount() - dwStart);
this->SetWindowText(str);htm

this->Invalidate();
}blog

#define MOV_POS_X (-256)     //座標變幻值
#define MOV_POS_Y (86)io


#define US_IMG_W (81)          // 原始圖像的大小
#define US_IMG_H (256)date


#define ANG_UNIT (60.0/(US_IMG_W - 1)) // 圖像橫像素所佔角度
#define LEN_UNIT ((512 - 1 - 20)/(US_IMG_H*1.0)) // 圖像堅像素所佔長度


BYTE CTestImgDlg::GetImageCordic(int i, int j)
{
BYTE val = m_pDataSW[i*m_WidthSW + j];

// 直角座標位置改變
double posX = i + MOV_POS_Y;
double posY = j + MOV_POS_X;

// posX = 300;
// posY = 300;
// 轉爲極座標

double len;
double ang;
// cordic_int(i,j,len,ang);
cordic_double(posX,posY,len,ang);


// 換算爲直角座標的座標
// double posX;
// double posY;

posX = ang/ANG_UNIT;
posY = len/LEN_UNIT;


posX = posX + US_IMG_W/2;
posY = posY - 56;

//最近鄰的必要.........
// posX += 0.5;
// posY += 0.5;


// 沒有落在圖像上,則爲黑色
if (posX < 0.0 || posX > US_IMG_W )
{
return 0;
}
if (posY < 0.0 || posY > US_IMG_H )
{
return 0;
}

 

// 下面是像素的計算--用的是簡化計算, 把一個像素的落點分爲8*8的可能區域,

//  若是要求更高,能夠區分更細,並且不佔什麼時間,  不過我想不必


int pointX = posX;
int pointY = posY;

//落點所在的區域
int X_c0 = (posX - pointX)*8;
int X_c1 = (posY - pointY)*8;

//取出四個點
int val00 = m_pDataUS[pointY * m_WidthUS + pointX];
int val01 = m_pDataUS[pointY * m_WidthUS + pointX + 1];
int val10 = m_pDataUS[(pointY+1) * m_WidthUS + pointX];
int val11 = m_pDataUS[(pointY+1) * m_WidthUS + pointX + 1];


//計算值--先求橫向,再求縱向
int v1 = val00 + ((val01 - val00)>>3)*X_c0;
int v2 = val10 + ((val11 - val10)>>3)*X_c0;
val = v1 + ((v2 - v1)>>3)*X_c1;

// val = posY;
// 計算圖像數值

 

return val;}

相關文章
相關標籤/搜索