57 #define SIG_DLL __declspec(dllexport) 59 #define SIG_DLL __declspec(dllimport) 458 virtual ~
ophSig(
void) =
default;
464 fftw_plan bwd_plan, fwd_plan;
489 bool sigConvertOffaxis_CPU(
Real angleX,
Real angleY);
497 bool sigConvertOffaxis_GPU(
Real angleX,
Real angleY);
505 bool sigConvertHPO_CPU(
Real depth,
Real_t redRate);
513 bool sigConvertHPO_GPU(
Real depth,
Real_t redRate);
524 bool sigConvertCAC_CPU(
double red,
double green,
double blue);
533 bool sigConvertCAC_GPU(
double red,
double green,
double blue);
539 double sigGetParamAT_CPU();
545 double sigGetParamAT_GPU();
555 double sigGetParamSF_CPU(
float zMax,
float zMin,
int sampN,
float th);
565 double sigGetParamSF_GPU(
float zMax,
float zMin,
int sampN,
float th);
572 bool propagationHolo_CPU(
float depth);
578 bool propagationHolo_GPU(
float depth);
580 bool Color_propagationHolo_GPU(
float depth);
592 bool load(
const char *real,
const char *imag);
599 bool save(
const char *real,
const char *imag);
600 bool save(
const char *real);
622 void linInterp(vector<T> &X, matrix<Complex<T>> &src, vector<T> &Xq, matrix<Complex<T>> &dst);
632 vector<Real> result(len);
633 Real step = (last - first) / (len - 1);
634 for (
int i = 0; i < len; i++) { result[i] = first + i * step; }
643 void absMat(matrix<Complex<T>>& src, matrix<T>& dst) {
644 if (src.size != dst.size) {
645 dst.resize(src.size[
_X], src.size[
_Y]);
647 for (
int i = 0; i < src.size[
_X]; i++)
649 for (
int j = 0; j < src.size[
_Y]; j++)
651 dst.mat[i][j] = sqrt(src.mat[i][j]._Val[
_RE] * src.mat[i][j]._Val[
_RE] + src.mat[i][j]._Val[
_IM] * src.mat[i][j]._Val[
_IM]);
661 void absMat(matrix<T>& src, matrix<T>& dst) {
662 if (src.size != dst.size) {
663 dst.resize(src.size[
_X], src.size[
_Y]);
665 for (
int i = 0; i < src.size[
_X]; i++)
667 for (
int j = 0; j < src.size[
_Y]; j++)
669 dst.mat[i][j] =
abs(src.mat[i][j]);
679 void angleMat(matrix<Complex<T>>& src, matrix<T>& dst) {
680 if (src.size != dst.size) {
681 dst.resize(src.size[
_X], src.size[
_Y]);
683 for (
int i = 0; i < src.size[
_X]; i++)
685 for (
int j = 0; j < src.size[
_Y]; j++)
687 angle(src(i, j), dst(i, j));
697 void conjMat(matrix<Complex<T>>& src, matrix<Complex<T>>& dst) {
698 if (src.size != dst.size) {
699 dst.resize(src.size[
_X], src.size[
_Y]);
701 for (
int i = 0; i < src.size[
_X]; i++)
703 for (
int j = 0; j < src.size[
_Y]; j++)
705 dst(i, j) = src(i, j).conj();
716 void expMat(matrix<Complex<T>>& src, matrix<Complex<T>>& dst) {
717 if (src.size != dst.size) {
718 dst.resize(src.size[
_X], src.size[
_Y]);
720 for (
int i = 0; i < src.size[
_X]; i++)
722 for (
int j = 0; j < src.size[
_Y]; j++)
724 dst.mat[i][j]._Val[
_RE] = exp(src.mat[i][j]._Val[
_RE]) * cos(src.mat[i][j]._Val[
_IM]);
725 dst.mat[i][j]._Val[
_IM] = exp(src.mat[i][j]._Val[
_RE]) * sin(src.mat[i][j]._Val[
_IM]);
735 void expMat(matrix<T>& src, matrix<T>& dst) {
736 if (src.size != dst.size) {
737 dst.resize(src.size[
_X], src.size[
_Y]);
739 for (
int i = 0; i < src.size[
_X]; i++)
741 for (
int j = 0; j < src.size[
_Y]; j++)
743 dst.mat[i][j] = exp(src.mat[i][j]);
755 for (
int i = 0; i < src.size[
_X]; i++)
757 for (
int j = 0; j < src.size[
_Y]; j++)
762 dst = dst / (src.size[
_X] * src.size[
_Y]);
771 for (
int i = 0; i < src.size[
_X]; i++)
773 for (
int j = 0; j < src.size[
_Y]; j++)
775 if (src(i, j) > max) max = src(i, j);
785 Complex<Real>
maxOfMat(matrix<Complex<Real>>& src) {
787 for (
int i = 0; i < src.size[
_X]; i++)
789 for (
int j = 0; j < src.size[
_Y]; j++)
791 if (src(i, j)._Val[
_RE] > max) max = src(i, j)._Val[
_RE];
804 for (
int i = 0; i < src.size[
_X]; i++)
806 for (
int j = 0; j < src.size[
_Y]; j++)
808 if (src(i, j) < min) min = src(i, j);
817 Complex<Real>
minOfMat(matrix<Complex<Real>>& src) {
819 for (
int i = 0; i < src.size[
_X]; i++)
821 for (
int j = 0; j < src.size[
_Y]; j++)
823 if (src(i, j)._Val[
_RE] < min) min = src(i, j)._Val[
_RE];
836 if (src.size != dst.size) {
837 dst.resize(src.size[
_X], src.size[
_Y]);
839 int xshift = src.size[
_X] / 2;
840 int yshift = src.size[
_Y] / 2;
841 for (
int i = 0; i < src.size[
_X]; i++)
843 int ii = (i + xshift) % src.size[
_X];
844 for (
int j = 0; j < src.size[
_Y]; j++)
846 int jj = (j + yshift) % src.size[
_Y];
847 dst.mat[ii][jj]._Val[
_RE] = src.mat[i][j].real();
848 dst.mat[ii][jj]._Val[
_IM] = src.mat[i][j].imag();
876 bool readConfig(
const char* fname);
877 void Parameter_Set(
int nx,
int ny,
double width,
double height ,
double NA );
878 void wavelength_Set(
double wavelength);
879 void focal_length_Set(
double red ,
double green,
double blue,
double rad);
880 void Data_output(
uchar *data,
int pos ,
int bitpixel);
881 void Wavenumber_output(
int &wavenumber);
890 bool sigConvertOffaxis(
Real angleX,
Real angleY);
891 bool cvtOffaxis_CPU(
Real angleX,
Real angleY);
892 void cvtOffaxis_GPU(
Real angleX,
Real angleY);
902 bool sigConvertHPO(
Real depth,
Real_t redRate);
913 bool sigConvertCAC(
double red,
double green,
double blue);
920 bool propagationHolo(
float depth);
934 double sigGetParamAT();
945 double sigGetParamSF(
float zMax,
float zMin,
int sampN,
float th);
951 void setMode(
bool is_CPU);
959 void cField2Buffer(matrix<Complex<Real>>& src, Complex<Real> **dst,
int nx,
int ny);
968 void ColorField2Buffer(matrix<Complex<Real>>& src, Complex<Real> **dst,
int nx,
int ny);
988 bool getComplexHFromPSDH(
const char* fname0,
const char* fname90,
const char* fname180,
const char* fname270);
1010 bool getComplexHFrom3ArbStepPSDH(
const char* f0,
const char* f1,
const char* f2,
const char* fOI,
const char* fRI,
int nIter);
1014 #endif // !__ophSig_h Complex< Real > maxOfMat(matrix< Complex< Real >> &src)
Function for extracts maximum of matrix , where matrix is complex number.
oph::matrix< Complex< Real > > OphComplexField
void abs(const oph::Complex< T > &src, oph::Complex< T > &dst)
void angleMat(matrix< Complex< T >> &src, matrix< T > &dst)
Function for extracts Complex phase value.
void meanOfMat(matrix< T > &src, T &dst)
Function for extracts mean of matrix.
void conjMat(matrix< Complex< T >> &src, matrix< Complex< T >> &dst)
Function for extracts Complex conjugate value.
Complex< Real > minOfMat(matrix< Complex< Real >> &src)
Function for extracts minimum of matrix , where matrix is complex number.
void expMat(matrix< Complex< T >> &src, matrix< Complex< T >> &dst)
Function for extracts exponent e(x), where x is complex number.
void fft2(ivec2 n, Complex< Real > *in, int sign=OPH_FORWARD, uint flag=OPH_ESTIMATE)
Functions for performing fftw 2-dimension operations inside Openholo.
void absMat(matrix< T > &src, matrix< T > &dst)
Function for extracts real absolute value.
void fftShift(matrix< Complex< Real >> &src, matrix< Complex< Real >> &dst)
Shift zero-frequency component to center of spectrum.
void absMat(matrix< Complex< T >> &src, matrix< T > &dst)
Function for extracts Complex absolute value.
virtual bool loadAsOhc(const char *fname)
Function to read OHC file.
Real minOfMat(matrix< Real > &src)
Function for extracts minimum of matrix , where matrix is real number.
void expMat(matrix< T > &src, matrix< T > &dst)
Function for extracts exponent e(x), where x is real number.
void angle(const std::vector< Complex< T >> &src, std::vector< T > &dst)
virtual bool saveAsOhc(const char *fname)
Function to write OHC file
Real maxOfMat(matrix< Real > &src)
Function for extracts maximum of matrix , where matrix is real number.
void fft1(int n, Complex< Real > *in, int sign=OPH_FORWARD, uint flag=OPH_ESTIMATE)
Functions for performing fftw 1-dimension operations inside Openholo.
vector< T > linspace(T first, T last, int len)
Generate linearly spaced vector.
virtual void ophFree(void)
Pure virtual function for override in child classes.