Hugin trunk 0.1
Loading...
Searching...
No Matches
Image.cpp
Go to the documentation of this file.
1/*
2* Copyright (C) 2007-2008 Anael Orlinski
3*
4* This file is part of Panomatic.
5*
6* Panomatic is free software; you can redistribute it and/or modify
7* it under the terms of the GNU General Public License as published by
8* the Free Software Foundation; either version 2 of the License, or
9* (at your option) any later version.
10*
11* Panomatic is distributed in the hope that it will be useful,
12* but WITHOUT ANY WARRANTY; without even the implied warranty of
13* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14* GNU General Public License for more details.
15*
16* You should have received a copy of the GNU General Public License
17* along with Panomatic; if not, write to the Free Software
18* <http://www.gnu.org/licenses/>.
19*/
20
21#include <iostream>
22#include <vector>
23
24#include "Image.h"
25
26namespace lfeat
27{
28
29Image::Image(vigra::DImage &img)
30{
31 init(img);
32}
33
34void Image::init(vigra::DImage &img)
35{
36 // store values
37 _width = img.width();
38 _height = img.height();
39
40 // allocate the integral image data
41 _ii = AllocateImage(_width + 1, _height + 1);
42
43 // create the integral image
45}
46
48{
49 if (_ii)
50 {
52 }
53 _ii = 0;
54}
55
57{
58 clean();
59}
60
61void Image::buildIntegralImage(vigra::DImage &img)
62{
63 // to make easier the later computation, shift the image by 1 pix (x and y)
64 // so the image has a size of +1 for width and height compared to orig image.
65
66 // fill first line with zero
67 for (unsigned int i = 0; i <= _width; ++i)
68 {
69 _ii[0][i] = 0;
70 }
71
72 // fill first row with zero
73 for (unsigned int i = 0; i <= _height; ++i)
74 {
75 _ii[i][0] = 0;
76 }
77
78 // compute all the others pixels
79 for (unsigned int i = 1; i <= _height; ++i)
80 for (unsigned int j = 1; j <= _width; ++j)
81 {
82 _ii[i][j] = img[i - 1][j - 1] + _ii[i - 1][j] + _ii[i][j - 1] - _ii[i - 1][j - 1];
83 }
84
85}
86
87// allocate and deallocate pixels
88double** Image::AllocateImage(unsigned int iWidth, unsigned int iHeight)
89{
90 // create the lines holder
91 double** aImagePtr = new double*[iHeight];
92
93 // create the lines
94 for (unsigned int i = 0; i < iHeight; ++i)
95 {
96 aImagePtr[i] = new double[iWidth] {};
97 }
98
99 return aImagePtr;
100}
101
102void Image::DeallocateImage(double** iImagePtr, unsigned int iHeight)
103{
104 // delete the lines
105 for (unsigned int i = 0; i < iHeight; ++i)
106 {
107 delete[] iImagePtr[i];
108 }
109
110 // delete the lines holder
111 delete[] iImagePtr;
112}
113
114} // namespace lfeat
unsigned int _height
Definition Image.h:74
void init(vigra::DImage &img)
Definition Image.cpp:34
double ** _ii
Definition Image.h:77
unsigned int _width
Definition Image.h:73
void buildIntegralImage(vigra::DImage &img)
Definition Image.cpp:61
void clean()
Definition Image.cpp:47
static void DeallocateImage(double **iImagePtr, unsigned int iHeight)
Definition Image.cpp:102
static double ** AllocateImage(unsigned int iWidth, unsigned int iHeight)
Definition Image.cpp:88
std::vector< deghosting::BImagePtr > threshold(const std::vector< deghosting::FImagePtr > &inputImages, const double threshold, const uint16_t flags)
Threshold function used for creating alpha masks for images.
Definition threshold.h:41