Commit 5d42469a7e606e120e67d7e91aa2a85fce8564ea
Merge branch 'master' of git.stim.ee.uh.edu:codebase/stimlib
Showing
4 changed files
with
42 additions
and
6 deletions
Show diff stats
stim/cuda/templates/conv2sep.cuh
@@ -8,8 +8,6 @@ | @@ -8,8 +8,6 @@ | ||
8 | #include <stim/cuda/sharedmem.cuh> | 8 | #include <stim/cuda/sharedmem.cuh> |
9 | #include <stim/cuda/cudatools/error.h> | 9 | #include <stim/cuda/cudatools/error.h> |
10 | 10 | ||
11 | -#define pi 3.14159 | ||
12 | - | ||
13 | namespace stim{ | 11 | namespace stim{ |
14 | namespace cuda{ | 12 | namespace cuda{ |
15 | 13 |
stim/envi/agilent_binary.h
@@ -125,7 +125,7 @@ public: | @@ -125,7 +125,7 @@ public: | ||
125 | infile.read((char*)ptr, bytes()); //read the data | 125 | infile.read((char*)ptr, bytes()); //read the data |
126 | infile.close(); | 126 | infile.close(); |
127 | Z[0] = 1; | 127 | Z[0] = 1; |
128 | - Z[1] = R[2]; | 128 | + Z[1] = (double)R[2]; |
129 | } | 129 | } |
130 | 130 | ||
131 | void save(std::string filename){ | 131 | void save(std::string filename){ |
stim/image/image.h
@@ -480,7 +480,6 @@ public: | @@ -480,7 +480,6 @@ public: | ||
480 | max_val = img[n]; | 480 | max_val = img[n]; |
481 | } | 481 | } |
482 | } | 482 | } |
483 | - | ||
484 | return max_val; | 483 | return max_val; |
485 | } | 484 | } |
486 | 485 | ||
@@ -508,6 +507,33 @@ public: | @@ -508,6 +507,33 @@ public: | ||
508 | return r; //return the inverted image | 507 | return r; //return the inverted image |
509 | } | 508 | } |
510 | 509 | ||
510 | + image<T> crop(size_t x0, size_t y0, size_t w, size_t h){ | ||
511 | + image<T> result(w, h, C()); //create the output cropped image | ||
512 | + | ||
513 | + size_t srci; | ||
514 | + size_t dsti; | ||
515 | + size_t line_bytes = w * C(); //calculate the number of bytes in a line | ||
516 | + for (size_t yi = 0; yi < h; yi++) { //for each row in the cropped image | ||
517 | + srci = (y0 + yi) * X() * C() + x0 * C(); //calculate the source index | ||
518 | + dsti = yi * w * C(); //calculate the destination index | ||
519 | + memcpy(&result.img[dsti], &img[srci], line_bytes); //copy the data | ||
520 | + } | ||
521 | + return result; | ||
522 | + } | ||
523 | + | ||
524 | + //crop regions given by an array of 1D index values | ||
525 | + std::vector<image<T>> crop_idx(size_t w, size_t h, std::vector<size_t> idx) { | ||
526 | + std::vector<image<T>> result(idx.size()); //create an array of image files to return | ||
527 | + for (size_t i = 0; i < idx.size(); i++) { //for each specified index point | ||
528 | + size_t y = idx[i] / X(); //calculate the y coordinate from the 1D index (center of ROI) | ||
529 | + size_t x = idx[i] - y * X(); //calculate the x coordinate (center of ROI) | ||
530 | + y -= w / 2; //update x and y values to reflect the lower corner of the ROI | ||
531 | + x -= h / 2; | ||
532 | + result[i] = crop(x, y, w, h); //get the cropped image and store it in the result array | ||
533 | + } | ||
534 | + return result; | ||
535 | + } | ||
536 | + | ||
511 | image<T> srgb2lab(){ | 537 | image<T> srgb2lab(){ |
512 | std::cout<<"ERROR stim::image::srgb2lab - function has been broken, re-implement."<<std::endl; | 538 | std::cout<<"ERROR stim::image::srgb2lab - function has been broken, re-implement."<<std::endl; |
513 | exit(1); | 539 | exit(1); |
stim/math/spharmonics.h
@@ -25,8 +25,20 @@ protected: | @@ -25,8 +25,20 @@ protected: | ||
25 | //calculate the value of the SH basis function (l, m) at (theta, phi) | 25 | //calculate the value of the SH basis function (l, m) at (theta, phi) |
26 | //here, theta = [0, PI], phi = [0, 2*PI] | 26 | //here, theta = [0, PI], phi = [0, 2*PI] |
27 | double SH(int l, int m, double theta, double phi){ | 27 | double SH(int l, int m, double theta, double phi){ |
28 | - std::complex<T> result = boost::math::spherical_harmonic(l, m, phi, theta); | ||
29 | - return result.imag() + result.real(); | 28 | + //std::complex<T> result = boost::math::spherical_harmonic(l, m, phi, theta); |
29 | + //return result.imag() + result.real(); | ||
30 | + | ||
31 | + //this calculation is based on calculating the real spherical harmonics: | ||
32 | + // https://en.wikipedia.org/wiki/Spherical_harmonics#Addition_theorem | ||
33 | + if (m < 0) { | ||
34 | + return sqrt(2.0) * pow(-1, m) * boost::math::spherical_harmonic(l, abs(m), phi, theta).imag(); | ||
35 | + } | ||
36 | + else if (m == 0) { | ||
37 | + return boost::math::spherical_harmonic(l, m, phi, theta).real(); | ||
38 | + } | ||
39 | + else { | ||
40 | + return sqrt(2.0) * pow(-1, m) * boost::math::spherical_harmonic(l, m, phi, theta).real(); | ||
41 | + } | ||
30 | } | 42 | } |
31 | 43 | ||
32 | unsigned int coeff_1d(unsigned int l, int m){ | 44 | unsigned int coeff_1d(unsigned int l, int m){ |