📄 summedareatable.cpp
字号:
// SummedAreaTable.cpp : implementation file//////////////////////////////////////////////////////////////////////////// Title: Summed area table to classify blocks of voxels faster//////////////////////////////////////////////////////////////////////////// Author: H.W.Kye// 138-dong 417-ho Seoul National University// San 56-1 Shinlim-dong Kwanak-gu Seoul, Korea// Email. //// Date :// Update ://////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// include//////////////////////////////////////////////////////////////////////#include "StdAfx.h"#include <xmmintrin.h>#include <malloc.h>#include "SummedAreaTable.h"//////////////////////////////////////////////////////////////////////// declaration//////////////////////////////////////////////////////////////////////static const int CACHESIZE=32;//*********************************************// Sn = A0 + A1 + ... + An 栏肺 沥狼茄促.// Al + ... + Am = Sm - S(l-1) 栏肺 荤侩茄促.// A0 + ... + Am = Sm - S(-1) 老 荐 乐促.// def. S[-1] = 0 栏肺 沥狼茄促.//*********************************************RxSummedAreaTable::RxSummedAreaTable(){ m_pTable = NULL; m_iMin = m_iMax = 0;}RxSummedAreaTable::~RxSummedAreaTable(){ DestroyTable();}//// S[-1]=0 阑 父甸扁 困秦 pointer甫 窍唱 颗变促.//BOOL RxSummedAreaTable::CreateTable(int iMin, int iMax){ ASSERT(iMin < iMax); DestroyTable(); m_iMin = iMin; m_iMax = iMax; m_iSize = iMax - iMin + 1 + 1; m_pTable = (int*)_mm_malloc(m_iSize * sizeof(int), CACHESIZE); memset(m_pTable, 0, m_iSize * sizeof(int)); m_pTable[0] = 0; m_pTable++; return (m_pTable != NULL);}//// S[-1]阑 绊妨秦辑 家芭窃//BOOL RxSummedAreaTable::DestroyTable(){ if(m_pTable) { m_pTable--; _mm_free(m_pTable); m_pTable = NULL; } return TRUE;}//// __m128狼 霉锅掳 alpha蔼阑 扁霖栏肺 1/0阑 沥窃//BOOL RxSummedAreaTable::MakeTable(const __m128 *pSrcTable){ ASSERT(pSrcTable != NULL); // clear table memset(m_pTable, 0, m_iSize * sizeof(int)); // make table __m128 vZero = _mm_setzero_ps(); int result; result = _mm_comigt_ss (*pSrcTable, vZero); m_pTable[0] = result; for (int i = 1; i < m_iSize; i++) { result = _mm_comigt_ss (pSrcTable[i], vZero); m_pTable[i] = m_pTable[i-1] + result; } return TRUE;}int RxSummedAreaTable::LookUp(int iMax, int iMin){ int p1 = iMax - m_iMin; int p2 = iMin - m_iMin - 1; int iRetval = m_pTable[p1] - m_pTable[p2]; return iRetval;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -