31 #include "l/l_sys_def.h"
33 #warning "[Code police] Do not put 'using namespace' in global scope of header."
35 #warning "[Code police] Do not put 'using namespace' in global scope of header."
36 using namespace kjb_c;
51 template <
class T>
class CImg
69 CImg(
const int Width,
const int Height,
70 const bool bMakeBuf =
true,
const bool bZero =
false);
76 CImg(
const T* pBuf,
const int Width,
const int Height,
77 const bool bCopy =
false);
102 const bool& bCopy =
false);
113 inline T GetPix(
const int&
x,
const int& y);
116 inline T GetPix(
const int&
i);
119 inline void SetPix(
const int& x,
const int& y,
const T& Val);
123 inline void SetPix(
const int& i,
const T& Val);
125 inline void AddToPix(
const int& x,
const int& y,
const T& Val);
131 void Set_pBuffer(
const T* pBuf,
const int Width,
const int Height,
132 const bool bCopy =
false);
135 inline int Width()
const {
return m_Width; }
138 inline int Height()
const {
return m_Height; }
141 inline int nPixels()
const {
return m_nPixels; }
151 inline T*
pROI() {
return m_pROI; }
190 inline bool IsEmpty() {
return (m_pBuffer == NULL); }
198 bool ReadRaw(
const char* strFilename);
199 bool WriteRaw(
const char* strFilename);
209 void ChangeROI(
const int StartX,
const int EndX,
210 const int StartY,
const int EndY);
214 void SafeChangeROI(
const int StartX,
const int EndX,
215 const int StartY,
const int EndY);
218 void ReduceROI(
int N = 1);
221 void SetOutROIVal(
const T& Val);
224 void SetOutROIVal(
const T& TopVal,
const T& BotVal,
225 const T& LeftVal,
const T& RightVal);
232 void SetROIVal(
const T& Val);
235 void OutPadROI(
const int& Padding);
258 void b2f(
CImg<float> &FloatImg,
float BGVal = 0.0f);
261 void i2f(
CImg<float> &FloatImg,
float BGVal = 0.0f);
265 void ToFloat(
CImg<float> &FloatImg,
float BGVal = 0.0f);
275 void ReduceSize(
const int& NewWidth,
const int& NewHeight);
278 void Crop(
const int& N);
285 void CopyFromBuf(T* pBuf);
288 void CopyFromBuf(T* pBuf,
const int& StartX,
const int& EndX,
289 const int& StartY,
const int& EndY);
293 void CopyToBuf(T* pBuf);
298 void Attach(T* pBuf);
301 void Attach(T* pBuf,
const int Width,
const int Height,
302 const bool bDelete =
false);
314 void Minpix(
int &x,
int &y, T& Val);
318 void Maxpix(
int &x,
int &y, T& Val);
324 void MinMax(T&
Min, T&
Max);
329 float MeanLuminance();
333 void MuSig(
float &mu,
float &sig);
344 void Normalize(
bool full_range =
false);
347 void ChangeRange(
const BYTE& NewMin,
const BYTE& NewMax);
348 void ChangeRange(
const float& NewMin,
const float& NewMax);
350 void FixThetaRanges(
const bool& bHalfPhase =
true);
379 void Pad(
CImg<T>& DestImg,
const int Left,
const int Top,
380 const T& Val = (T)0);
386 void Extract(
CImg<T> &DestImg,
const int& Left = 0,
const int& Top =0);
398 void Mul(
const T& Val);
403 void Div(
const T& Val);
408 void Add(
const T& Val);
413 void Sub(
const T& Val);
421 void Log(
const float& z = 0.0f);
429 void HardOR(
CImg<T>& Img,
const T& Val = (T)255);
436 void HardAND(
CImg<T>& Img,
const T& Val = (T)255);
454 void SwapPointers(
CImg<T> &InImg);
466 kjb_int32 nNonZeros();
473 void Val2Probability(
const float& Sigma);
475 void CopyPixelsFromImgROI(
CImg<T>& Img);
506 template <
class T>
class CImgVec
511 CImgVec(T** ppBuffers,
const int nFrames,
const int Width,
512 const int Height,
bool bDelete =
false);
524 const int& Padding = 0);
532 inline int Width() {
return m_Width; }
535 assert(m_nFrames == (
int)m_vecImgs.size());
return m_nFrames; }
540 inline T*
pBuffer(
const int& i) {
return m_vecImgs[
i]->pBuffer(); }
541 inline typename vector<CImg<T>*>::iterator
itImgs() {
return m_vecImgs.begin();}
547 void Attach(T** ppBuffers,
const int nFrames,
const int Width,
548 const int Height,
bool bDelete =
false);
550 bool Allocate(
const int nFrames,
const int Width,
const int Height,
558 void ChangeRange(
const T& NewMin,
const T& NewMax);
560 void FixThetaRanges(
const bool& bHalfPhase =
true);
593 const int Height,
const bool bCopy)
595 m_ROISize = m_nPixels = Height*Width;
597 m_pBuffer =
new T[m_nPixels];
599 T* op = (T*)m_pBuffer;
600 for (
int i = 0; i < m_nPixels; i++, ip++, op++) *op = *ip;
604 m_pBuffer = (T*)pBuf;
608 m_ROIHeight = m_ROIEndY = m_Height = Height;
609 m_ROIWidth = m_ROIEndX = m_Width = Width;
610 m_ROISize = m_nPixels = Height*Width;
611 m_ROIOffset = m_ROISkipCols = m_ROIStartX = m_ROIStartY = 0;
617 m_Width = m_Height = m_ROIStartX = m_ROIEndX = m_ROIWidth =
618 m_ROIStartY = m_ROIEndY = m_ROIHeight = m_ROISize =
619 m_ROIOffset = m_ROISkipCols = m_nPixels = 0;
621 m_pBuffer = m_pROI = NULL;
627 if (m_bDelete)
zap(m_pBuffer);
651 const bool bMakeBuf,
const bool bZero)
653 m_ROIHeight = m_ROIEndY = m_Height = Height;
654 m_ROIWidth = m_ROIEndX = m_Width = Width;
655 m_ROISize = m_nPixels = Height*Width;
656 m_ROIOffset = m_ROISkipCols = m_ROIStartX = m_ROIStartY = 0;
658 m_pROI = (m_pBuffer =
new T[m_nPixels]);
660 if (bZero) memset(m_pBuffer, 0, m_nPixels*
sizeof(T));
664 m_pROI = (m_pBuffer = NULL);
681 Set_pBuffer(pBuf, Width, Height, bCopy);
694 m_Width = TImg.
Width();
705 m_pBuffer =
new T[m_nPixels];
706 m_pROI = (T*)m_pBuffer+m_ROIOffset;
712 for (
int y = m_ROIStartY; y < m_ROIEndY;
713 y++, fp += m_ROISkipCols, myfp += m_ROISkipCols)
714 for (
int x = m_ROIStartX; x < m_ROIEndX;
733 int LeftPad, TopPad, RightPad, BotPad;
734 LeftPad = TopPad = RightPad = BotPad = Padding;
735 if (m_ROIStartX-Padding < 0) LeftPad = m_ROIStartX;
736 if (m_ROIStartY-Padding < 0) TopPad = m_ROIStartY;
737 if (m_ROIEndX+Padding > m_Width) RightPad = m_Width-m_ROIEndX;
738 if (m_ROIEndY+Padding> m_Height) BotPad = m_Height-m_ROIEndY;
740 const int InROIWidth = InImg.
ROIWidth();
741 const int InROIHeight = InImg.
ROIHeight();
742 m_Width = InROIWidth+LeftPad+RightPad;
743 m_Height = InROIHeight+TopPad+BotPad;
744 m_nPixels = m_Width*m_Height;
745 m_pBuffer =
new T[m_nPixels];
747 ChangeROI(0, m_Width, 0, m_Height);
748 InImg.
ChangeROI(InStartX-LeftPad, InEndX+RightPad,
749 InStartY-TopPad, InEndY+BotPad);
752 InImg.
ChangeROI(InStartX, InEndX, InStartY, InEndY);
754 ChangeROI(LeftPad, LeftPad+InROIWidth, TopPad, TopPad+InROIHeight);
764 int LeftPad, TopPad, RightPad, BotPad;
765 LeftPad = TopPad = RightPad = BotPad = Padding;
766 if (m_ROIStartX-Padding < 0) LeftPad = m_ROIStartX;
767 if (m_ROIStartY-Padding < 0) TopPad = m_ROIStartY;
768 if (m_ROIEndX+Padding > m_Width) RightPad = m_Width-m_ROIEndX;
769 if (m_ROIEndY+Padding> m_Height) BotPad = m_Height-m_ROIEndY;
771 ChangeROI(m_ROIStartX-LeftPad, m_ROIEndX+RightPad,
772 m_ROIStartY-TopPad, m_ROIEndY+BotPad);
783 m_Height = ImgVec.
Height();
784 m_Width = ImgVec.
Width();
785 m_nPixels = m_Width*m_Height;
786 m_ROIStartY = ImgVec.ROIStartY();
787 m_ROIStartX = ImgVec.ROIStartX();
788 m_ROIEndY = ImgVec.ROIEndY();
789 m_ROIEndX = ImgVec.ROIEndX();
790 m_ROIHeight = ImgVec.ROIHeight();
791 m_ROIWidth = ImgVec.ROIWidth();
792 m_ROISkipCols = ImgVec.ROISkipCols();
793 m_ROIOffset = ImgVec.ROIOffset();
794 m_ROISize = ImgVec.ROISize();
797 m_pBuffer =
new T[m_nPixels];
799 T* pSeq = ImgVec.
m_vecImgs[iFrame]->m_pBuffer;
801 for (
int y = m_ROIStartY; y < m_ROIEndY;
802 y++, pSeq += m_ROISkipCols, pImg += m_ROISkipCols)
803 for (
int x = m_ROIStartX; x < m_ROIEndX;
809 m_pBuffer = ImgVec.
m_vecImgs[iFrame]->m_pBuffer;
812 m_pROI = m_pBuffer+m_ROIOffset;
822 const int& nCols,
const int& nRows)
827 for (
int row = 0; row < nRows; row++) {
828 for (
int col = 0; col < nCols; col++, i++) {
829 if (row == 0) m_Width += (ImgVec.
GetImg(i))->ROIWidth();
830 if (col == 0) m_Height += (ImgVec.
GetImg(i))->ROIHeight();
834 m_nPixels = m_Width*m_Height;
835 m_pBuffer =
new T[m_nPixels];
838 m_ROIHeight = m_ROIEndY = m_Height;
839 m_ROIWidth = m_ROIEndX = m_Width;
840 m_ROISize = m_nPixels;
841 m_ROIOffset = m_ROISkipCols = m_ROIStartX = m_ROIStartY = 0;
843 int StartX = 0, StartY = 0, EndX, EndY;
844 for (
int row = 0; row < nRows; row++) {
845 for (
int col = 0; col < nCols; col++, i++) {
847 const int InROIWidth = (ImgVec.
GetImg(i))->ROIWidth();
848 const int InROIHeight = (ImgVec.
GetImg(i))->ROIHeight();
850 EndX = StartX+InROIWidth;
851 EndY = StartY+InROIHeight;
852 ChangeROI(StartX, EndX, StartY, EndY);
854 const int InStartX = (ImgVec.
GetImg(i))->ROIStartX();
855 const int InStartY = (ImgVec.
GetImg(i))->ROIStartY();
856 const int InEndX = (ImgVec.
GetImg(i))->ROIEndX();
857 const int InEndY = (ImgVec.
GetImg(i))->ROIEndY();
858 const int InSkip = (ImgVec.
GetImg(i))->ROISkipCols();
859 T* pInROI = (ImgVec.
GetImg(i))->pROI();
861 for (
int y = InStartY; y < InEndY; y++, pInROI += InSkip,
862 pOutROI += m_ROISkipCols) {
863 for (
int x = InStartX; x < InEndX; x++, pInROI++,
877 void report_int(
const std::string& msg,
int value);
905 return m_pBuffer[y*m_Width+
x];
920 m_pBuffer[y*m_Width+
x] = Val;
936 m_pBuffer[y*m_Width+
x] += Val;
946 m_pBuffer = m_pROI = NULL;
959 if ((fh = fopen(strFilename,
"r")) == NULL)
return false;
960 else return ((
int)fread(m_pBuffer,
sizeof(T), m_nPixels, fh) ==
968 if ((fh = fopen(strFilename,
"w")) == NULL)
return false;
969 else return ((
int)fwrite(m_pBuffer,
sizeof(T), m_nPixels, fh) ==
979 m_ROIHeight = m_ROIEndY = m_Height;
980 m_ROIWidth = m_ROIEndX = m_Width;
981 m_nPixels = m_Width*m_Height;
982 m_ROISize = m_nPixels;
983 m_ROIOffset = m_ROISkipCols = m_ROIStartX = m_ROIStartY = 0;
992 assert(m_Width >= NewWidth);
993 assert(m_Height >= NewHeight);
995 m_Height = m_ROIHeight = m_ROIEndY = NewHeight;
996 m_Width = m_ROIWidth = m_ROIEndX = NewWidth;
997 m_nPixels = m_ROISize = NewWidth*NewHeight;
998 m_ROIOffset = m_ROISkipCols = m_ROIStartX = m_ROIStartY = 0;
1007 const int StartY,
const int EndY)
1009 m_ROIStartX = StartX;
1011 m_ROIStartY = StartY;
1013 m_ROIHeight = EndY-StartY;
1014 m_ROIWidth = EndX-StartX;
1015 m_ROISkipCols = m_Width-m_ROIWidth;
1016 m_ROIOffset = StartY*m_Width+StartX;
1017 m_ROISize = m_ROIHeight*m_ROIWidth;
1018 m_pROI = (T*)m_pBuffer+m_ROIOffset;
1027 int StartY,
int EndY)
1029 if (StartX < 0) StartX = 0;
1030 if (EndX > m_Width) EndX = m_Width;
1031 if (StartY < 0) StartY = 0;
1032 if (EndY > m_Height) EndY = m_Height;
1033 m_ROIStartX = StartX;
1035 m_ROIStartY = StartY;
1037 m_ROIHeight = EndY-StartY;
1038 m_ROIWidth = EndX-StartX;
1039 m_ROISkipCols = m_Width-m_ROIWidth;
1040 m_ROIOffset = StartY*m_Width+StartX;
1041 m_ROISize = m_ROIHeight*m_ROIWidth;
1042 m_pROI = (T*)m_pBuffer+m_ROIOffset;
1051 ChangeROI(m_ROIStartX+N, m_ROIEndX-N, m_ROIStartY+N, m_ROIEndY-N);
1061 CImg<T> CroppedImg(m_ROIWidth, m_ROIHeight);
1063 SwapPointers(CroppedImg);
1064 ReduceSize(m_ROIWidth, m_ROIHeight);
1074 for (
int y = m_ROIStartY; y < m_ROIEndY;
1075 y++, pROI += m_ROISkipCols)
1076 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pROI++)
1087 for (y = 0; y < m_ROIStartY; y++) {
1088 yoffset = y*m_Width;
1089 for (x = 0; x < m_Width; x++)
1090 m_pBuffer[yoffset+x] = Val;
1092 for (y = m_ROIEndY; y < m_Height; y++) {
1093 yoffset = y*m_Width;
1094 for (x = 0; x < m_Width; x++)
1095 m_pBuffer[yoffset+x] = Val;
1097 for (y = m_ROIStartY; y < m_ROIEndY; y++) {
1098 yoffset = y*m_Width;
1099 for (x = 0; x < m_ROIStartX; x++)
1100 m_pBuffer[yoffset+x] = Val;
1102 for (y = m_ROIStartY; y < m_ROIEndY; y++) {
1103 yoffset = y*m_Width;
1104 for (x = m_ROIEndX; x < m_Width; x++)
1105 m_pBuffer[yoffset+x] = Val;
1111 const T& LeftVal,
const T& RightVal)
1114 for (y = 0; y < m_ROIStartY; y++) {
1115 yoffset = y*m_Width;
1116 for (x = 0; x < m_Width; x++)
1117 m_pBuffer[yoffset+x] = TopVal;
1119 for (y = m_ROIEndY; y < m_Height; y++) {
1120 yoffset = y*m_Width;
1121 for (x = 0; x < m_Width; x++)
1122 m_pBuffer[yoffset+x] = BotVal;
1124 for (y = m_ROIStartY; y < m_ROIEndY; y++) {
1125 yoffset = y*m_Width;
1126 for (x = 0; x < m_ROIStartX; x++)
1127 m_pBuffer[yoffset+x] = LeftVal;
1129 for (y = m_ROIStartY; y < m_ROIEndY; y++) {
1130 yoffset = y*m_Width;
1131 for (x = m_ROIEndX; x < m_Width; x++)
1132 m_pBuffer[yoffset+x] = RightVal;
1141 int yoffset, yoffset2,
x,
x2, y;
1142 const int StartX2 = m_ROIStartX+m_ROIStartX;
1143 const int StartY2 = m_ROIStartY+m_ROIStartY;
1144 const int EndX2 = m_ROIEndX+m_ROIEndX;
1145 const int EndY2 = m_ROIEndY+m_ROIEndY;
1147 for (y = 0; y < m_ROIStartY; y++) {
1148 yoffset = y*m_Width;
1149 yoffset2 = (StartY2-y-1)*m_Width;
1150 for (x = 0; x < m_Width; x++)
1151 m_pBuffer[yoffset+x] = m_pBuffer[yoffset2+x];
1153 for (y = m_ROIEndY; y < m_Height; y++) {
1154 yoffset = y*m_Width;
1155 yoffset2 = (EndY2-y-1)*m_Width;
1156 for (x = 0; x < m_Width; x++)
1157 m_pBuffer[yoffset+x] = m_pBuffer[yoffset2+x];
1159 for (y = m_ROIStartY; y < m_ROIEndY; y++) {
1160 yoffset = y*m_Width;
1161 for (x = 0; x < m_ROIStartX; x++) {
1163 m_pBuffer[yoffset+
x] = m_pBuffer[yoffset+
x2];
1166 for (y = m_ROIStartY; y < m_ROIEndY; y++) {
1167 yoffset = y*m_Width;
1168 for (x = m_ROIEndX; x < m_Width; x++) {
1170 m_pBuffer[yoffset+
x] = m_pBuffer[yoffset+
x2];
1176 for (y = 0; y < m_ROIStartY; y++) {
1177 yoffset = y*m_Width;
1178 yoffset2 = (StartY2-y-1)*m_Width;
1179 for (x = 0; x < m_ROIStartX; x++) {
1181 m_pBuffer[yoffset+
x] = m_pBuffer[yoffset2+
x2];
1185 for (y = m_ROIEndY; y < m_Height; y++) {
1186 yoffset = y*m_Width;
1187 yoffset2 = (EndY2-y-1)*m_Width;
1188 for (x = 0; x < m_ROIStartX; x++) {
1190 m_pBuffer[yoffset+
x] = m_pBuffer[yoffset2+
x2];
1194 for (y = 0; y < m_ROIStartY; y++) {
1195 yoffset = y*m_Width;
1196 yoffset2 = (StartY2-y-1)*m_Width;
1197 for (x = m_ROIEndX; x < m_Width; x++) {
1199 m_pBuffer[yoffset+
x] = m_pBuffer[yoffset2+
x2];
1203 for (y = m_ROIEndY; y < m_Height; y++) {
1204 yoffset = y*m_Width;
1205 yoffset2 = (EndY2-y-1)*m_Width;
1206 for (x = m_ROIEndX; x < m_Width; x++) {
1208 m_pBuffer[yoffset+
x] = m_pBuffer[yoffset2+
x2];
1222 for (
int y = m_ROIStartY; y < m_ROIEndY; y++, pROI += m_ROISkipCols)
1223 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pROI++, pFrmBuf++)
1231 const int& StartY,
const int& EndY)
1235 for (
int y = m_ROIStartY; y < m_ROIEndY; y++, pROI += m_ROISkipCols) {
1236 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pROI++, pFrmBuf++) {
1237 if ((x >= StartX) &&
1256 for (
int y = m_ROIStartY; y < m_ROIEndY; y++, pROI += m_ROISkipCols)
1257 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pROI++, pBuf2++)
1270 m_pROI = (T*)m_pBuffer+m_ROIOffset;
1281 m_ROIHeight = m_ROIEndY = m_Height = Height;
1282 m_ROIWidth = m_ROIEndX = m_Width = Width;
1283 m_ROISize = m_nPixels = Height*Width;
1284 m_ROIOffset = m_ROISkipCols = m_ROIStartX = m_ROIStartY = 0;
1285 if (m_bDelete)
zap(m_pBuffer);
1286 m_pROI = m_pBuffer = pBuf;
1287 m_bDelete = bDelete;
1307 float *inp = m_pROI;
1311 for (y = m_ROIStartY; y < m_ROIEndY; y++, inp += m_ROISkipCols)
1312 for (x = m_ROIStartX; x < m_ROIEndX; x++, inp++) {
1313 if ((TmpF = *inp) > Max) Max = TmpF;
1314 if (TmpF < Min) Min = TmpF;
1320 float factor = 255.0f/(Max-
Min);
1321 for (y = m_ROIStartY; y < m_ROIEndY;
1322 y++, inp += m_ROISkipCols, pOut += pOut_rskip)
1323 for (x = m_ROIStartX; x < m_ROIEndX; x++, inp++, pOut++)
1324 *pOut = (
BYTE)((*inp-
Min)*factor);
1334 float *inp = m_pROI;
1337 for (y = m_ROIStartY; y < m_ROIEndY;
1338 y++, inp += m_ROISkipCols, pOut += m_ROISkipCols)
1339 for (x = m_ROIStartX; x < m_ROIEndX; x++, inp++, pOut++)
1352 float *inp = m_pROI;
1354 float factor = 255.0f/(Max-
Min);
1356 for (
int y = m_ROIStartY; y < m_ROIEndY;
1357 y++, inp += m_ROISkipCols, pOut += m_ROISkipCols)
1358 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, inp++, pOut++) {
1359 *pOut = (
BYTE)((*inp-m)*factor);
1370 float *pOut = FloatImg.
pROI();
1372 for (
int y = m_ROIStartY; y < m_ROIEndY; y++, inp += m_ROISkipCols,
1374 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, inp++, pOut++)
1375 *pOut = (
float)*inp;
1385 float* pOut = FloatImg.
pROI();
1386 for (
int y = m_ROIStartY; y < m_ROIEndY;
1387 y++, pIn += m_ROISkipCols,
1388 pOut += m_ROISkipCols)
1389 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pIn++, pOut++)
1390 *pOut = (
float)*pIn;
1400 float* pOut = FloatImg.
pROI();
1401 for (
int y = m_ROIStartY; y < m_ROIEndY; y++, pIn += m_ROISkipCols,
1402 pOut += m_ROISkipCols)
1403 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pIn++, pOut++)
1404 *pOut = (
float)*pIn;
1417 for (
int yy = m_ROIStartY; yy < m_ROIEndY;
1418 yy++, pROI += m_ROISkipCols)
1419 for (
int xx = m_ROIStartX; xx < m_ROIEndX; xx++, pROI++) {
1438 for (
int yy = m_ROIStartY; yy < m_ROIEndY;
1439 yy++, pROI += m_ROISkipCols)
1440 for (
int xx = m_ROIStartX; xx < m_ROIEndX; xx++, pROI++) {
1458 T Tmp, *pROI = m_pROI;
1459 for (
int yy = m_ROIStartY; yy < m_ROIEndY;
1460 yy++, pROI += m_ROISkipCols)
1461 for (
int xx = m_ROIStartX; xx < m_ROIEndX; xx++, pROI++)
1462 if ((Tmp = *pROI) > Val) Val = Tmp;
1474 for (
int y = m_ROIStartY; y < m_ROIEndY;
1475 y++, pROI += m_ROISkipCols)
1476 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pROI++) {
1478 if (Tmp >= Max) Max = Tmp;
1479 if (Tmp < Min) Min = Tmp;
1491 for (
int y = m_ROIStartY; y < m_ROIEndY;
1492 y++, pROI += m_ROISkipCols) {
1493 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pROI++) {
1495 if (Tmp >= Max) Max = Tmp;
1496 if (Tmp < Min) Min = Tmp;
1509 BYTE* pROI = m_pROI;
1511 for (
int y = m_ROIStartY; y < m_ROIEndY;
1512 y++, pROI += m_ROISkipCols)
1513 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pROI++)
1515 return (
float)sum/(float)m_ROISize;
1521 float* pROI = m_pROI;
1523 for (
int y = m_ROIStartY; y < m_ROIEndY;
1524 y++, pROI += m_ROISkipCols)
1525 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pROI++)
1527 return sum/(float)m_ROISize;
1537 BYTE* pROI = m_pROI;
1538 int imu = 0, isigsqr = 0;
1539 for (
int yy = m_ROIStartY; yy < m_ROIEndY;
1540 yy++, pROI += m_ROISkipCols)
1541 for (
int xx = m_ROIStartX; xx < m_ROIEndX; xx++, pROI++) {
1544 isigsqr +=
SQR(TmpI);
1546 float count = (float)m_ROISize;
1547 mu = (float)imu/count;
1548 sig = (float)sqrt((
double)((float)isigsqr/count-
SQR(mu)));
1554 float* pROI = m_pROI;
1555 float fmu = 0, fsigsqr = 0;
1556 for (
int y = m_ROIStartY; y < m_ROIEndY;
1557 y++, pROI += m_ROISkipCols)
1558 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pROI++) {
1561 fsigsqr +=
SQR(TmpF);
1563 float count = (float)m_ROISize;
1565 sig = (float)sqrt((
double)(fsigsqr/count-
SQR(mu)));
1575 BYTE* pROI = m_pROI;
1577 for (
int yy = m_ROIStartY; yy < m_ROIEndY;
1578 yy++, pROI += m_ROISkipCols)
1579 for (
int xx = m_ROIStartX; xx < m_ROIEndX; xx++, pROI++)
1584 Sum += (kjb_int32)(*pROI);
1593 float* pROI = m_pROI;
1595 for (
int y = m_ROIStartY; y < m_ROIEndY;
1596 y++, pROI += m_ROISkipCols)
1597 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pROI++) {
1599 if (TmpF > 0.0f) Sum += TmpF;
1614 float* pROI = m_pROI;
1615 float factor = 1.0f/sig;
1616 for (
int y = m_ROIStartY; y < m_ROIEndY;
1617 y++, pROI += m_ROISkipCols)
1618 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pROI++)
1619 *pROI = (*pROI-mu)*factor;
1627 TmpFloatImg.
ChangeROI(m_ROIStartX, m_ROIEndX,
1628 m_ROIStartY, m_ROIEndY);
1636 if (-Min > Max) Max = -
Min;
1637 float* fp = TmpFloatImg.
pROI();
1639 const float factor = 127.5f/
Max;
1640 for (
int y = m_ROIStartY; y < m_ROIEndY;
1641 y++, fp += m_ROISkipCols, bp += m_ROISkipCols)
1642 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, fp++, bp++)
1643 *bp = (
BYTE)(*fp*factor+127.5f);
1649 BYTE* pROI = m_pROI;
1650 float factor = 50.0f/sig;
1651 for (
int y = m_ROIStartY; y < m_ROIEndY;
1652 y++, pROI += m_ROISkipCols)
1653 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pROI++) {
1654 float TmpF = ((float)*pROI-mu)*factor+127.5f;
1655 if (TmpF < 0.0f) *pROI = 0;
1656 else if (TmpF > 255.0f) *pROI = 255;
1657 else *pROI = (
BYTE)TmpF;
1669 BYTE OldMinByte, OldMaxByte;
1670 float OldMin, NewMinR, OldMax, Factor;
1671 float OldRange, NewRange;
1674 NewMinR = (float)NewMin;
1675 MinMax(OldMinByte, OldMaxByte);
1676 OldMin = (float)OldMinByte;
1677 OldMax = (float)OldMaxByte;
1678 OldRange = OldMax-OldMin;
1680 if (OldRange == 0) {
1682 const BYTE Val = (
BYTE)((
float)(NewMax-NewMin)*0.5f);
1683 for (
int y = m_ROIStartY; y < m_ROIEndY;
1684 y++, pROI += m_ROISkipCols)
1685 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pROI++)
1689 NewRange = (float)NewMax-(
float)NewMin;
1690 Factor = NewRange/OldRange;
1692 for (
int y = m_ROIStartY; y < m_ROIEndY;
1693 y++, pROI += m_ROISkipCols)
1694 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pROI++)
1695 *pROI = (
BYTE)((*pROI-OldMin)*Factor+NewMin);
1701 const float& NewMax)
1703 float OldMin, NewMinR, OldMax, Factor;
1704 float OldRange, NewRange;
1708 MinMax(OldMin, OldMax);
1709 OldRange = OldMax-OldMin;
1711 if (OldRange == 0) {
1713 Factor = (NewMax-NewMin)/2.0f;
1714 for (
int y = m_ROIStartY; y < m_ROIEndY;
1715 y++, pROI += m_ROISkipCols)
1716 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pROI++)
1720 NewRange = NewMax-NewMin;
1721 Factor = NewRange/OldRange;
1723 for (
int y = m_ROIStartY; y < m_ROIEndY;
1724 y++, pROI += m_ROISkipCols)
1725 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pROI++)
1726 *pROI = (*pROI-OldMin)*Factor+NewMin;
1735 float* pROI = m_pROI;
1736 for (
int y = m_ROIStartY; y < m_ROIEndY;
1737 y++, pROI += m_ROISkipCols)
1738 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pROI++)
1753 const int hdx = dx/2, hdx2 = (dx-1)/2, hdy = dy/2, hdy2 = (dy-1)/2;;
1756 for (
int y = m_ROIStartY; y < m_ROIEndY;
1757 y++, ip += m_Width, tp += m_ROIWidth) {
1760 for (
int i = 0; i < dx; i++, ip2++) mean += (
float)*ip2;
1761 float *tp2 = tp+hdx;
1762 int x, xe = m_ROIEndX-hdx2;
1763 for (x = m_ROIStartX+hdx; x < xe; x++, ip2++, tp2++) {
1771 const float boxarea = (float)(dx*dy);
1772 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, tp++, mup++) {
1773 float *tp2 = tp,
mean = 0.0f;
1774 int ys = m_ROIStartY+hdy, ye = m_ROIEndY-hdy2,
i;
1775 for (i = 0; i < dy; i++, tp2 += m_ROIWidth) mean += (
float)*tp2;
1776 float *mup2 = mup+hdy*m_ROIWidth;
1777 for (
int y = ys; y < ye;
1778 y++, tp2 += m_ROIWidth, mup2 += m_ROIWidth) {
1779 const int dyoff = dy*m_ROIWidth;
1780 *mup2 = (float)mean/boxarea;
1781 mean -= *(tp2-dyoff);
1786 MuImg.
ChangeROI(hdx, m_ROIWidth-hdx2, hdy, m_ROIHeight-hdy2);
1788 MuImg.
ChangeROI(0, m_ROIWidth, 0, m_ROIHeight);
1799 MuFilter(MuImg, TImg, dx, dy);
1811 const int hdx = dx/2, hdy = dy/2;
1814 for (
int y = m_ROIStartY; y < m_ROIEndY;
1815 y++, ip += m_Width, tp += m_ROIWidth, up += m_ROIWidth) {
1817 float mean = 0.0f, sig = 0.0f;
1818 for (
int i = 0; i < dx; i++, ip2++) {
1819 float TmpF = (float)*ip2;
1823 float *tp2 = tp+hdx;
1824 float *up2 = up+hdx;
1825 int x, xe = m_ROIEndX-dx;
1826 for (x = 0; x < xe; x++, ip2++, tp2++, up2++) {
1829 float before = (float)*(ip2-dx), after = (float)*ip2;
1840 const float boxarea = (float)(dx*dy);
1841 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, tp++,mup++,up++,sigp++) {
1842 float *tp2 = tp, *up2 = up,
mean = 0.0f, sig = 0.0f;
1843 int ye = m_ROIEndY-dy,
i;
1844 for (i = 0; i < dy; i++, tp2 += m_ROIWidth, up2 += m_ROIWidth) {
1848 float *mup2 = mup+hdy*m_ROIWidth;
1849 float *sigp2 = sigp+hdy*m_ROIWidth;
1850 for (
int y = 0; y < ye; y++, tp2 += m_ROIWidth,mup2 += m_ROIWidth,
1851 up2 += m_ROIWidth, sigp2 += m_ROIWidth) {
1852 const int dyoff = dy*m_ROIWidth;
1853 float mu = (float)mean/boxarea;
1855 *sigp2 = (float)sqrt((
double)(sig/boxarea-
SQR(mu)));
1856 mean -= *(tp2-dyoff);
1858 sig -= *(up2-dyoff);
1863 MuImg.
ChangeROI(hdx, m_ROIWidth-dx+hdx, hdy, m_ROIHeight-dy+hdy);
1865 MuImg.
ChangeROI(0, m_ROIWidth, 0, m_ROIHeight);
1866 SigImg.
ChangeROI(hdx, m_ROIWidth-dx+hdx, hdy, m_ROIHeight-dy+hdy);
1868 SigImg.
ChangeROI(0, m_ROIWidth, 0, m_ROIHeight);
1882 MuSigFilter(MuImg, SigImg, TImg, UImg, dx, dy);
1897 DestImg.
ChangeROI(Left, Left+m_Width, Top, Top+m_Height);
1900 DestImg.
ChangeROI(StartX, EndX, StartY, EndY);
1912 const int StartX = m_ROIStartX, StartY = m_ROIStartY,
1913 EndX = m_ROIEndX, EndY = m_ROIEndY;
1914 ChangeROI(Left, Left+DestImg.
Width(), Bot, Bot+DestImg.
Height());
1916 ChangeROI(StartX, EndX, StartY, EndY);
1923 float *pROI = m_pROI;
1924 const int sk = m_ROISkipCols;
1925 for (
int y = m_ROIStartY; y < m_ROIEndY; y++, pROI += sk)
1926 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pROI++) {
1927 const float Val = *pROI;
1937 memset(m_pBuffer, 0, m_Width*m_Height*
sizeof(T));
1948 T *pROI = m_pROI, *pOtherROI= Img.
pROI();
1949 int x, y, EndX = m_ROIEndX, sk1 = m_ROISkipCols,
1951 for (y = m_ROIStartY; y < m_ROIEndY; y++, pROI += sk1, pOtherROI+= sk2)
1952 for (x = m_ROIStartX; x < EndX; x++, pROI++, pOtherROI++)
1953 *pROI *= *pOtherROI;
1964 int x, y, EndX = m_ROIEndX, EndY = m_ROIEndY, sk = m_ROISkipCols;
1965 for (y = m_ROIStartY; y < EndY; y++, pROI += sk)
1966 for (x = m_ROIStartX; x < EndX; x++, pROI++)
1976 T *pROI = m_pROI, *pOtherROI= Img.
pROI();
1977 int x, y, EndX = m_ROIEndX,
1979 for (y = m_ROIStartY; y < m_ROIEndY; y++, pROI += sk1, pOtherROI+= sk2)
1980 for (x = m_ROIStartX; x < EndX; x++, pROI++, pOtherROI++)
1981 *pROI /= *pOtherROI;
1991 int x, y, EndX = m_ROIEndX, EndY = m_ROIEndY, sk = m_ROISkipCols;
1992 const float factor = 1.0f/Val;
1993 for (y = m_ROIStartY; y < EndY; y++, pROI += sk)
1994 for (x = m_ROIStartX; x < EndX; x++, pROI++)
2004 T *pROI = m_pROI, *pOtherROI= Img.
pROI();
2005 int x, y, EndX = m_ROIEndX,
2007 for (y = m_ROIStartY; y < m_ROIEndY; y++, pROI += sk1, pOtherROI+= sk2)
2008 for (x = m_ROIStartX; x < EndX; x++, pROI++, pOtherROI++)
2009 *pROI += *pOtherROI;
2019 int x, y, EndX = m_ROIEndX, EndY = m_ROIEndY, sk = m_ROISkipCols;
2020 for (y = m_ROIStartY; y < EndY; y++, pROI += sk)
2021 for (x = m_ROIStartX; x < EndX; x++, pROI++)
2031 T *pROI = m_pROI, *pOtherROI= Img.
pROI();
2032 int x, y, EndX = m_ROIEndX,
2034 for (y = m_ROIStartY; y < m_ROIEndY; y++, pROI += sk1, pOtherROI+= sk2)
2035 for (x = m_ROIStartX; x < EndX; x++, pROI++, pOtherROI++)
2036 *pROI -= *pOtherROI;
2046 int x, y, EndX = m_ROIEndX, EndY = m_ROIEndY, sk = m_ROISkipCols;
2047 for (y = m_ROIStartY; y < EndY; y++, pROI += sk)
2048 for (x = m_ROIStartX; x < EndX; x++, pROI++)
2058 BYTE* pROI = m_pROI;
2059 for (
int y = m_ROIStartY; y < m_ROIEndY;
2060 y++, pROI += m_ROISkipCols)
2061 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pROI++)
2062 *pROI = (
BYTE)255-(*pROI);
2070 for (
int y = m_ROIStartY; y < m_ROIEndY;
2071 y++, pROI += m_ROISkipCols)
2072 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pROI++)
2083 float* pROI = m_pROI;
2084 for (
int y = m_ROIStartY; y < m_ROIEndY;
2085 y++, pROI += m_ROISkipCols)
2086 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pROI++) {
2087 float Val = *pROI+z;
2088 if (Val <= 0.0f) *pROI = -99999.9f;
2089 else *pROI = (float)log(Val);
2103 T* pROI = m_pROI, *pOtherROI= Img.
pROI(), ZeroVal = (T)0;
2104 int x, y, EndX = m_ROIEndX, sk1 = m_ROISkipCols,
2106 for (y = m_ROIStartY; y < m_ROIEndY; y++, pROI += sk1, pOtherROI+= sk2)
2107 for (x = m_ROIStartX; x < EndX; x++, pROI++, pOtherROI++)
2108 if ((*pROI != ZeroVal) || (*pOtherROI!= ZeroVal)) *pROI = Val;
2120 T* pROI = m_pROI, *pOtherROI= Img.
pROI(), ZeroVal = (T)0;
2121 int x, y, EndX = m_ROIEndX, sk1 = m_ROISkipCols,
2123 for (y = m_ROIStartY; y < m_ROIEndY; y++, pROI += sk1, pOtherROI+= sk2)
2124 for (x = m_ROIStartX; x < EndX; x++, pROI++, pOtherROI++)
2125 if ((*pROI == ZeroVal) && (*pOtherROI != ZeroVal))
2137 T* pROI = m_pROI, *pOtherROI= Img.
pROI(), ZeroVal = (T)0;
2138 int x, y, EndX = m_ROIEndX, sk1 = m_ROISkipCols,
2140 for (y = m_ROIStartY; y < m_ROIEndY; y++, pROI += sk1, pOtherROI+= sk2)
2141 for (x = m_ROIStartX; x < EndX; x++, pROI++, pOtherROI++)
2142 if ((*pROI != ZeroVal) && (*pOtherROI!= ZeroVal)) *pROI = Val;
2152 T* pROI = m_pROI, *pOtherROI= Img.
pROI(), ZeroVal = (T)0;
2153 int x, y, EndX = m_ROIEndX, sk1 = m_ROISkipCols,
2155 for (y = m_ROIStartY; y < m_ROIEndY; y++, pROI += sk1, pOtherROI+= sk2)
2156 for (x = m_ROIStartX; x < EndX; x++, pROI++, pOtherROI++)
2157 if (*pOtherROI== ZeroVal) *pROI = (T)0;
2201 m_pROI = InImg.
pROI();
2210 SwapPointers(InImg);
2241 BYTE* pROI = m_pROI;
2242 kjb_int32 sumofsquares = 0;
2243 for (
int y = m_ROIStartY; y < m_ROIEndY;
2244 y++, pROI += m_ROISkipCols)
2245 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pROI++) {
2246 const kjb_int32 Val = (kjb_int32)*pROI;
2247 sumofsquares += Val*Val;
2249 return (
float)sqrt((
float)sumofsquares);
2255 float* pROI = m_pROI;
2256 float sumofsquares = 0;
2257 for (
int y = m_ROIStartY; y < m_ROIEndY;
2258 y++, pROI += m_ROISkipCols)
2259 for (
int x = m_ROIStartX; x < m_ROIEndX; x++, pROI++) {
2260 const float Val = *pROI;
2261 sumofsquares += Val*Val;
2263 return (
float)sqrt(sumofsquares);
2271 const int StartX = m_ROIStartX, EndX = m_ROIEndX,
2272 StartY = m_ROIStartY, EndY = m_ROIEndY, sk = m_ROISkipCols;
2273 T* pBuffer = m_pBuffer;
2274 kjb_int32 nPoints = 0;
2275 for (
int y = StartY; y < EndY; y++, pBuffer += sk)
2276 for (
int x = StartX; x < EndX; x++, pBuffer++)
2277 if (*pBuffer != (T)0) nPoints++;
2285 const int StartX = m_ROIStartX, EndX = m_ROIEndX,
2286 StartY = m_ROIStartY, EndY = m_ROIEndY, sk = m_ROISkipCols;
2287 float* pBuffer = m_pBuffer;
2288 for (
int y = StartY; y < EndY; y++, pBuffer += sk)
2289 for (
int x = StartX; x < EndX; x++, pBuffer++)
2290 if (*pBuffer) *pBuffer = (float)sqrt((
float)*pBuffer);
2298 const float MinusOneOverSigma = -1.0f/Sigma;
2299 const int StartX = m_ROIStartX, EndX = m_ROIEndX,
2300 StartY = m_ROIStartY, EndY = m_ROIEndY, sk = m_ROISkipCols;
2301 float* pBuffer = m_pBuffer;
2302 for (
int y = StartY; y < EndY; y++, pBuffer += sk)
2303 for (
int x = StartX; x < EndX; x++, pBuffer++)
2305 *pBuffer = 1.0f-(float)exp(*pBuffer*MinusOneOverSigma);
2317 T* pOutROI = m_pROI;
2318 T* pInROI = Img.
pROI();
2319 for (
int y = InStartY; y < InEndY; y++, pInROI += InSkip,
2320 pOutROI += m_ROISkipCols) {
2321 for (
int x = InStartX; x < InEndX; x++, pInROI++, pOutROI++) {
2339 const int Height,
bool bDelete)
2341 Attach(ppBuffers, nFrames, Width, Height, bDelete);
2350 m_nFrames = nRows*nCols;
2352 m_ROIWidth = m_ROIEndX = m_Width = 0;
2353 m_ROIHeight = m_ROIEndY = m_Height = 0;
2354 m_ROISize = m_FrameSize = 0;
2355 m_ROIOffset = m_ROISkipCols = m_ROIStartX = m_ROIStartY = 0;
2358 const int InOrigStartX = InImg.
ROIStartX();
2359 const int InOrigStartY = InImg.
ROIStartY();
2360 const int InOrigEndX = InImg.
ROIEndX();
2361 const int InOrigEndY = InImg.
ROIEndY();
2363 const int InWidth = InImg.
Width(), InHeight = InImg.
Height();
2364 const int AvSubWidth = InWidth/nCols, AvSubHeight = InHeight/nRows;
2366 const int HalfAvSubWidth = AvSubWidth/2;
2367 const int HalfAvSubHeight = AvSubHeight/2;
2369 for (
int row = 0; row < nRows; row++) {
2370 int InStartX, InStartY, InEndX, InEndY;
2372 InStartY = row*AvSubHeight;
2373 InEndY = (row+1)*AvSubHeight;
2374 if (InEndY > InHeight-HalfAvSubHeight) InEndY = InHeight;
2376 for (
int col = 0; col < nCols; col++) {
2377 InStartX = col*AvSubWidth;
2378 InEndX = (col+1)*AvSubWidth;
2379 if (InEndX > InWidth-HalfAvSubWidth) InEndX = InWidth;
2381 if (InEndX > InWidth-HalfAvSubWidth) InEndX = InWidth;
2382 InImg.
ChangeROI(InStartX, InEndX, InStartY, InEndY);
2389 m_vecImgs.push_back(pSubImg);
2393 InImg.
ChangeROI(InOrigStartX, InOrigEndX, InOrigStartY, InOrigEndY);
2409 m_ROIWidth = m_ROIEndX = m_Width = 0;
2410 m_ROIHeight = m_ROIEndY = m_Height = 0;
2411 m_ROISize = m_FrameSize = 0;
2412 m_ROIOffset = m_ROISkipCols = m_ROIStartX = m_ROIStartY = 0;
2422 const int Height,
bool bDelete)
2424 m_ROIWidth = m_ROIEndX = m_Width = Width;
2425 m_ROIHeight = m_ROIEndY = m_Height = Height;
2426 m_ROISize = m_FrameSize = Width*Height;
2427 m_ROIOffset = m_ROISkipCols = m_ROIStartX = m_ROIStartY = 0;
2428 m_TotalSize = m_FrameSize*nFrames;
2429 m_nFrames = nFrames;
2430 for (
int i = 0; i < nFrames; i++)
2431 m_vecImgs.push_back(
new CImg<T>(ppBuffers[i], Width, Height,
2440 if (!m_vecImgs.empty()) {
2441 for (
int i = 0; i < m_nFrames; i++)
2451 const int Height,
bool bZero)
2453 m_ROIWidth = m_ROIEndX = m_Width = m_Width = Width;
2454 m_ROIHeight = m_ROIEndY = m_Height = Height;
2455 m_ROISize = m_FrameSize = Width*Height;
2456 m_ROIOffset = m_ROISkipCols = m_ROIStartX = m_ROIStartY = 0;
2457 m_TotalSize = m_FrameSize*nFrames;
2458 m_nFrames = nFrames;
2460 for (
int i = 0; i < nFrames; i++) {
2462 if (pImg == NULL)
return false;
2463 m_vecImgs.push_back(pImg);
2489 for (
int i = 0; i < m_nFrames; i++)
2490 m_vecImgs[i]->ChangeRange(NewMin, NewMax);
2497 for (
int i = 0; i < m_nFrames; i++)
2498 m_vecImgs[i]->FixThetaRanges(bHalfPhase);
2506 return (m_nFrames == 0);
#define zap(x)
Definition: utils.h:137
int m_ROIEndY
Definition: img.h:490
int m_nFrames
Definition: img.h:568
int m_ROIWidth
Definition: img.h:493
int nPixels() const
Definition: img.h:141
int m_ROISkipCols
Definition: img.h:581
float Max(float *pBuf, int Size)
Definition: utils.cpp:90
int m_Width
Definition: img.h:480
int m_ROIHeight
Definition: img.h:580
int m_ROIStartY
Definition: img.h:488
int Height()
Definition: img.h:533
void report_int(const std::string &msg, int value)
Definition: img.cpp:27
void FixThetaRange(float &Theta, const bool &bHalfPhase=true)
Definition: utils.cpp:261
void MinMax(T &Min, T &Max)
Definition: img.h:1469
vector< CImg< kjb_int32 > * >::iterator LongImgVecIter
Definition: img.h:2524
int ROIWidth()
Definition: img.h:169
int ROIEndX()
Definition: img.h:163
int m_Height
Definition: img.h:567
void ChangeROI(const int StartX, const int EndX, const int StartY, const int EndY)
Definition: img.h:1006
void CopyFromBuf(T *pBuf)
Definition: img.h:1218
int m_FrameSize
Definition: img.h:569
CImgVec< float > * FloatCImgVecPtr
Definition: img.h:2520
int m_ROIStartX
Definition: img.h:487
int ROIEndY()
Definition: img.h:165
CImg< float > * FloatCImgPtr
Definition: img.h:2515
int m_Width
Definition: img.h:566
int ROIStartY()
Definition: img.h:164
int m_TotalSize
Definition: img.h:570
Value_type mean(Iterator begin, Iterator end, const Value_type &)
Definition: prob_stat.h:56
int m_ROIEndY
Definition: img.h:578
int FrameSize()
Definition: img.h:536
int Width() const
Definition: img.h:135
bool IsNotEmpty()
Definition: img.h:191
vector< CImg< BYTE > * >::iterator ByteImgVecIter
Definition: img.h:2523
void CopyToBuf(T *pBuf)
Definition: img.h:1252
int ROISkipCols()
Definition: img.h:166
vector< CImg< int > * >::iterator IntImgVecIter
Definition: img.h:2526
int m_ROISize
Definition: img.h:583
void SetOutROIVal(const T &Val)
Definition: img.h:1084
int Width()
Definition: img.h:532
int ROISize()
Definition: img.h:179
int m_ROIWidth
Definition: img.h:579
int m_ROISkipCols
Definition: img.h:491
#define Square(a, x, y)
Definition: triangle.c:4036
x
Definition: APPgetLargeConnectedEdges.m:100
#define CONST_MIN_FLOAT
Definition: utils.h:20
CImgVec< BYTE > * ByteCImgVecPtr
Definition: img.h:2518
#define BYTE
Definition: utils.h:96
void Normalize(bool full_range=false)
int TotalSize()
Definition: img.h:537
T * m_pROI
Definition: img.h:486
int m_ROIStartY
Definition: img.h:576
int ROIOffset()
Definition: img.h:176
count
Definition: APPgetLargeConnectedEdges.m:71
CImg< int > * IntCImgPtr
Definition: img.h:2516
sum(zmx.*zmy) sum(zmy.^2)]
x2
Definition: APPgetLargeConnectedEdges.m:123
int m_Height
Definition: img.h:481
int m_ROIStartX
Definition: img.h:575
bool bDelete()
Definition: img.h:145
int Height() const
Definition: img.h:138
int m_nPixels
Definition: img.h:482
int m_ROIHeight
Definition: img.h:494
CImgVec< kjb_int32 > * LongCImgVecPtr
Definition: img.h:2519
int ROIStartX()
Definition: img.h:162
T * m_pBuffer
Definition: img.h:479
CImg< kjb_int32 > * LongCImgPtr
Definition: img.h:2514
bool m_bDelete
Definition: img.h:483
int m_ROISize
Definition: img.h:496
get the indices of edges in each direction for i
Definition: APPgetLargeConnectedEdges.m:48
#define SQR(x)
Definition: utils.h:99
for m
Definition: APPgetLargeConnectedEdges.m:64
CImg< BYTE > * ByteCImgPtr
TYPES.
Definition: img.h:2513
int ROIHeight()
Definition: img.h:172
vector< CImg< float > * >::iterator FloatImgVecIter
Definition: img.h:2525
vector< CImg< T > * >::iterator itImgs()
Definition: img.h:541
int m_ROIEndX
Definition: img.h:577
int m_ROIEndX
Definition: img.h:489
int m_ROIOffset
Definition: img.h:495
float Min(float *pBuf, int Size)
Definition: utils.cpp:107
#define CONST_MAX_FLOAT
Definition: utils.h:17
T * pBuffer()
Definition: img.h:148
bool IsEmpty()
Definition: img.h:190
T * pROI()
Definition: img.h:151
int nFrames()
Definition: img.h:534
int m_ROIOffset
Definition: img.h:582
CImg< T > * GetImg(const int &i)
Definition: img.h:539
T * pBuffer(const int &i)
Definition: img.h:540
vector< CImg< T > * > m_vecImgs
Definition: img.h:572