⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 radontransformer.cpp

📁 用c++来实现一个radon变换
💻 CPP
字号:
// radontransformer.cpp: implementation of the RadonTransformer class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "RadonTransformer.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

RadonTransformer::RadonTransformer()
{
	int theta;
	for (theta=0;theta<180;theta++)
	{
		this->m_nCos[theta]=cos(theta);
		this->m_nSin[theta]=sin(theta);
	}
}

RadonTransformer::~RadonTransformer()
{

}

bool RadonTransformer::DoTransform(IplImage* image, RadonMap* rMap)
{
	int i, total;
	int x, y;
	int theta, distance;
	int cenX, cenY;

	if (image->depth!=IPL_DEPTH_8U||image->nChannels!=1)
		return false;

	this->m_nWidth=image->width;
	this->m_nHeight=image->height;

	cenX=this->m_nWidth/2;
	cenY=this->m_nHeight/2;
	this->m_nDistSqrMax=((image->width+1)/2)*((image->width+1)/2)+
						((image->height+1)/2)*((image->height+1)/2);
	this->m_nDistanceMax=int (sqrt(this->m_nDistSqrMax)+0.5);
	this->m_nDistSqrMax=this->m_nDistSqrMax/(RADON_DISTANCE_MAX*RADON_DISTANCE_MAX);

	for (x=0; x<this->m_nWidth; x++)
	{
		for (y=0; y<this->m_nHeight; y++)
		{
			if (0==image->imageData[y*image->widthStep+x])
				continue;

			for (theta=0; theta<RADON_THETA_MAX; theta++)
			{
				distance=(int)
					((double)(x-cenX)*this->m_nCos[theta]+(double)(y-cenY)*this->m_nSin[theta]+this->m_nDistanceMax);
				distance*=RADON_DISTANCE_MAX;
				i=distance/(this->m_nDistanceMax+this->m_nDistanceMax);
				if (i<0)
				{
					i++;i--;
				}
				if (i>=RADON_DISTANCE_MAX)
				{
					i++;i--;
				}
				rMap->m_nMap[theta*RADON_DISTANCE_MAX+i]+=255;
			}
		}
	}

	total=RADON_DISTANCE_MAX*RADON_THETA_MAX;
	for (i=0; i<total; i++)
	{
		rMap->m_nMap[i]/=this->m_nDistSqrMax;
		if (rMap->m_nMap[i]>rMap->m_nMax)
			rMap->m_nMax=rMap->m_nMap[i];
	}

	return true;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -