1d08c377
David Mayerich
added grids subdi...
|
1
2
3
|
#ifndef STIM_IMAGE_STACK_H
#define STIM_IMAGE_STACK_H
|
8b7be670
David Mayerich
implemented savin...
|
4
5
6
7
|
#include "../parser/wildcards.h"
#include "../parser/filename.h"
#include "../grids/grid_data.h"
#include "../image/image.h"
|
1d08c377
David Mayerich
added grids subdi...
|
8
9
10
11
|
namespace stim{
//this creates a class that can be used to load 3D grid data from stacks of images
|
8b7be670
David Mayerich
implemented savin...
|
12
|
// The class uses a 4D grid_data object, where the first dimension is color
|
1d08c377
David Mayerich
added grids subdi...
|
13
|
template<typename T>
|
8b7be670
David Mayerich
implemented savin...
|
14
15
16
17
18
19
20
21
|
class image_stack : public virtual grid_data<T, 4>{
enum image_type {stimAuto, stimMono, stimRGB, stimRGBA};
protected:
using grid_data<T, 4>::R;
using grid_data<T, 4>::ptr;
using grid_data<T, 4>::samples;
|
1d08c377
David Mayerich
added grids subdi...
|
22
|
|
8157c392
David Mayerich
added parser and ...
|
23
24
|
public:
|
8b7be670
David Mayerich
implemented savin...
|
25
26
27
28
29
30
31
32
33
34
35
|
void load_images(std::string file_mask){
stim::filename file_path(file_mask);
//if the file path is relative, update it with the current working directory
if(file_path.is_relative()){
stim::filename wd = stim::filename::cwd();
file_path = wd.get_relative(file_mask);
}
//get the list of files
|
445d9db7
David Mayerich
fixed directory e...
|
36
|
std::vector<stim::filename> file_list = file_path.get_list();
|
5cda84ab
David Mayerich
putting pranathi ...
|
37
38
39
40
41
42
|
//if there are no matching files, exit
if(file_list.size() == 0){
std::cout<<"STIM ERROR (image_stack): No matching files for loading a stack."<<std::endl;
exit(1);
}
|
8b7be670
David Mayerich
implemented savin...
|
43
44
|
//load the first image and set all of the image_stack properties
|
445d9db7
David Mayerich
fixed directory e...
|
45
|
std::cout<<"File to Load: "<<file_list[0].str()<<std::endl;
|
8b7be670
David Mayerich
implemented savin...
|
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
stim::image<T> I(file_list[0].str());
//set the image resolution and number of channels
R[0] = I.channels();
R[1] = I.width();
R[2] = I.height();
R[3] = file_list.size();
//allocate storage space
ptr = (T*)malloc(sizeof(T) * samples());
//load and copy each image into the grid
for(unsigned int i = 0; i<R[3]; i++){
//load the image
stim::image<T> I(file_list[i].str());
//retrieve the interlaced data from the image - store it in the grid
I.data_interleaved(&ptr[ i * R[0] * R[1] * R[2] ]);
}
}
|
6156690f
David Mayerich
added ability to ...
|
68
69
70
71
72
73
74
75
76
77
78
|
void save_image(std::string file_name, unsigned int i){
//create an image
stim::image<T> I;
//retrieve the interlaced data from the image - store it in the grid
I.set_interleaved(&ptr[ i * R[0] * R[1] * R[2] ], R[1], R[2], R[0]);
I.save(file_name);
}
|
8b7be670
David Mayerich
implemented savin...
|
79
80
81
82
83
84
85
86
87
88
89
90
91
|
void save_images(std::string file_mask){
stim::filename file_path(file_mask);
//if the file path is relative, update it with the current working directory
if(file_path.is_relative()){
stim::filename wd = stim::filename::cwd();
file_path = wd.get_relative(file_mask);
}
//create a list of file names
std::vector<std::string> file_list = stim::wildcards::increment(file_path.str(), 0, R[3]-1, 1);
|
6156690f
David Mayerich
added ability to ...
|
92
93
94
|
for(int i=0; i<R[3]; i++)
save_image(file_list[i], i);
}
|
8b7be670
David Mayerich
implemented savin...
|
95
|
|
8157c392
David Mayerich
added parser and ...
|
96
|
|
8157c392
David Mayerich
added parser and ...
|
97
98
99
|
|
1d08c377
David Mayerich
added grids subdi...
|
100
101
102
103
104
|
};
}
|
8b7be670
David Mayerich
implemented savin...
|
105
|
#endif
|