Compare View
Commits (2)
Showing
2 changed files
Show diff stats
python/imagestack.py
... | ... | @@ -2,8 +2,10 @@ import glob |
2 | 2 | import imageio |
3 | 3 | import numpy |
4 | 4 | import progressbar |
5 | +import skimage.transform | |
6 | +import os | |
5 | 7 | |
6 | -def loadstack(fmask, dtype=numpy.float32): | |
8 | +def load(fmask, dtype=numpy.float32): | |
7 | 9 | #read the input files |
8 | 10 | F = glob.glob(fmask) |
9 | 11 | if(len(F)==0): |
... | ... | @@ -14,13 +16,16 @@ def loadstack(fmask, dtype=numpy.float32): |
14 | 16 | I = imageio.imread(F[0]) |
15 | 17 | |
16 | 18 | #generate the image stack |
17 | - S = numpy.zeros((len(F), I.shape[0], I.shape[1], I.shape[2]), dtype) | |
19 | + if I.ndim == 3: | |
20 | + S = numpy.zeros((len(F), I.shape[0], I.shape[1], I.shape[2]), dtype) | |
21 | + else: | |
22 | + S = numpy.zeros((len(F), I.shape[0], I.shape[1]), dtype) | |
18 | 23 | |
19 | 24 | bar = progressbar.ProgressBar(max_value=len(F)) |
20 | 25 | |
21 | 26 | for i in range(0, len(F)): |
22 | 27 | I = imageio.imread(F[i]) |
23 | - S[i, :, :, :] = I | |
28 | + S[i, ...] = I | |
24 | 29 | bar.update(i+1) |
25 | 30 | |
26 | 31 | return S |
... | ... | @@ -31,10 +36,35 @@ def rgb2gray(rgb): |
31 | 36 | |
32 | 37 | return gray |
33 | 38 | |
34 | -def savestack(I, fname, extension = ".bmp"): | |
39 | +def save(I, fname, extension = "bmp"): | |
35 | 40 | #output the final images |
36 | 41 | bar = progressbar.ProgressBar(max_value=I.shape[0]) |
37 | 42 | #save the output files |
38 | 43 | for i in range(0, I.shape[0]): |
39 | - imageio.imwrite(fname + "%03d" % i + extension, I[i, :, :, :]) | |
40 | - bar.update(i+1) | |
41 | 44 | \ No newline at end of file |
45 | + imageio.imwrite(fname + "%03d" % i + "." + extension, I[i, ...]) | |
46 | + bar.update(i+1) | |
47 | + | |
48 | +#rescale a stack of images along X and Y by an integer value n and save to directory dest | |
49 | +def resize(fmask, dest, n, outformat=None): | |
50 | + #read the input files | |
51 | + F = glob.glob(fmask) | |
52 | + if(len(F)==0): | |
53 | + print("No image files found.") | |
54 | + return | |
55 | + | |
56 | + #initialize a progress bar | |
57 | + bar = progressbar.ProgressBar(max_value=len(F)) | |
58 | + | |
59 | + #for each file | |
60 | + for i in range(0, len(F)): | |
61 | + | |
62 | + #load the file to memory | |
63 | + I = imageio.imread(F[i]) | |
64 | + R = skimage.transform.downscale_local_mean(I, (n, n)) | |
65 | + if outformat is None: | |
66 | + imageio.imwrite(dest+"/"+os.path.basename(F[i]), R) | |
67 | + else: | |
68 | + imageio.imwrite(dest+"/"+os.path.basename(F[i]).split('.')[0] + "." + outformat, R) | |
69 | + bar.update(i+1) | |
70 | + | |
71 | + | |
42 | 72 | \ No newline at end of file | ... | ... |
stim/image/image.h
... | ... | @@ -238,7 +238,7 @@ public: |
238 | 238 | |
239 | 239 | |
240 | 240 | #ifdef USING_OPENCV |
241 | - void from_opencv(unsigned char* buffer, size_t width, size_t height) { | |
241 | + void from_opencv_888(unsigned char* buffer, size_t width, size_t height) { | |
242 | 242 | allocate(width, height, 3); |
243 | 243 | T value; |
244 | 244 | size_t i; |
... | ... | @@ -252,6 +252,22 @@ public: |
252 | 252 | } |
253 | 253 | } |
254 | 254 | } |
255 | + void from_opencv_8888(unsigned char* buffer, size_t width, size_t height) { | |
256 | + //std::cerr << "ERROR - this software is not yet enabled to handle RGBA images (alpha channel)." << std::endl; | |
257 | + //exit(1); | |
258 | + allocate(width, height, 4); | |
259 | + T value; | |
260 | + size_t i; | |
261 | + for (size_t c = 0; c < C(); c++) { //copy directly | |
262 | + for (size_t y = 0; y < Y(); y++) { | |
263 | + for (size_t x = 0; x < X(); x++) { | |
264 | + i = y * X() * C() + x * C() + (3 - c); | |
265 | + value = buffer[i]; | |
266 | + img[idx(x, y, c)] = value; | |
267 | + } | |
268 | + } | |
269 | + } | |
270 | + } | |
255 | 271 | #endif |
256 | 272 | //Copy N data points from source to dest, casting while doing so |
257 | 273 | template<typename S, typename D> |
... | ... | @@ -280,7 +296,9 @@ public: |
280 | 296 | type_copy<unsigned char, T>(cv_ptr, img, size()); |
281 | 297 | //memcpy(img, cv_ptr, bytes()); |
282 | 298 | if(C() == 3) //if this is a 3-color image, OpenCV uses BGR interleaving |
283 | - from_opencv(cv_ptr, X(), Y()); | |
299 | + from_opencv_888(cv_ptr, X(), Y()); | |
300 | + if (C() == 4) | |
301 | + from_opencv_8888(cv_ptr, X(), Y()); | |
284 | 302 | #else |
285 | 303 | stim::filename file(filename); |
286 | 304 | if (file.extension() == "ppm") | ... | ... |