Blame view

stim/grids/image_stack.h 2.53 KB
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
  #include "../parser/wildcards.h"
  #include "../parser/filename.h"
ad4a30c5   David Mayerich   changed grid_data...
6
  #include "../grids/grid.h"
8b7be670   David Mayerich   implemented savin...
7
  #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
ad4a30c5   David Mayerich   changed grid_data...
12
  //	The class uses a 4D grid object, where the first dimension is color
1d08c377   David Mayerich   added grids subdi...
13
  template<typename T>
ad4a30c5   David Mayerich   changed grid_data...
14
  class image_stack : public virtual stim::grid<T, 4>{
8b7be670   David Mayerich   implemented savin...
15
16
17
18
  
  	enum image_type {stimAuto, stimMono, stimRGB, stimRGBA};
  
  protected:
ad4a30c5   David Mayerich   changed grid_data...
19
20
21
  	using stim::grid<T, 4>::R;
  	using stim::grid<T, 4>::ptr;
  	using stim::grid<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