Example #1
0
int main(int argc, char *argv[]) {

	if(argc<2) 
		return -1;

	char* fname = argv[1];
	char fname_out[50] = "recon.bmp";

	if (argc>2)
		strcpy(fname_out, argv[2]);

	FILE* fin =	fopen(fname,"rb");

	if (!fin) {
		printf("no such file: %s\n", fname);
		return -1;
	}

	int N1;
	int	N2;
	int i, j;
	float lambda;

	fread(&N1, sizeof(int), 1, fin);
	fread(&N2, sizeof(int), 1, fin);
	fread(&lambda, sizeof(float), 1, fin);

	float complex *f = (float complex*) calloc(N1*N2,sizeof(float complex));
	float *img		 = (float*) calloc(N1*N2,sizeof(float));
	float *mask		 = (float*) calloc(N1*N2,sizeof(float));
	float *f_r		 = (float*) calloc(N1*N2,sizeof(float));
	float *f_i	 	 = (float*) calloc(N1*N2,sizeof(float));

	// Read the data from files
	fread(f_r, sizeof(float), N1*N2, fin);
	fread(f_i, sizeof(float), N1*N2, fin);
	fread(mask, sizeof(float), N1*N2, fin);
	fclose(fin);

	for(i=0; i<N1; i++) {
		for(j=0; j<N2; j++) {
			f[i*N2+j] = f_r[i*N2+j] + f_i[i*N2+j]*I;
		}
	}
	free(f_r);
	free(f_i);
    
    mri(img, f, mask, lambda, N1, N2);

	imnorm(img, N1, N2);
	imwrite(img, N1, N2, fname_out);
	
	free(f);
	free(img);
	free(mask);

	return 0;
}
Example #2
0
int main(int argc, char *argv[]) {
	
	char* fname;
	char fname_out[50] = "recon.bmp";
	FILE* fin;
	int N1;
	int N2;
	int i, j;
	float lambda;

	MPI_Init(&argc, &argv);

	MPI_Comm_size(MPI_COMM_WORLD, &mpi_nprocs);
	MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);

	// Include float complex as an MPI datatype and create the
	// float complex sum operator.
	MPI_Type_contiguous(2, MPI_FLOAT, &FLOAT_COMPLEX);
	MPI_Type_commit(&FLOAT_COMPLEX);
	MPI_Op_create((void*) &mpi_sum_complexf, 1, &FC_SUM);

	if(argc<2) {
		MPI_Finalize();
		return -1;
	}

	fname = argv[1];

	int exit = 0;
	if (mpi_rank == 0 && argc>2) {
		strcpy(fname_out, argv[2]);
		fin =	fopen(fname,"rb");
		if (!fin) {
			printf("no such file: %s\n", fname);
			exit = 1;
		}
	}
	MPI_Bcast(&exit, 1, MPI_INT, 0, MPI_COMM_WORLD);
	if (exit == 1) {
		MPI_Finalize();
		return -1;
	}

	if (mpi_rank == 0) {
		fread(&N1, sizeof(int), 1, fin);
		fread(&N2, sizeof(int), 1, fin);
		fread(&lambda, sizeof(float), 1, fin);
	}

	MPI_Bcast(&N1, 1, MPI_INT, 0, MPI_COMM_WORLD);
	MPI_Bcast(&N2, 1, MPI_INT, 0, MPI_COMM_WORLD);
	MPI_Bcast(&lambda, 1, MPI_INT, 0, MPI_COMM_WORLD);

	float complex *f = (float complex*) calloc(N1*N2,sizeof(float complex));
	float *img		 = (float*) calloc(N1*N2,sizeof(float));
	float *mask		 = (float*) calloc(N1*N2,sizeof(float));
	float *f_r		 = (float*) calloc(N1*N2,sizeof(float));
	float *f_i	 	 = (float*) calloc(N1*N2,sizeof(float));

	// Read the data from files
	if (mpi_rank == 0) {
		fread(f_r, sizeof(float), N1*N2, fin);
		fread(f_i, sizeof(float), N1*N2, fin);
		fread(mask, sizeof(float), N1*N2, fin);
		fclose(fin);

		for(i=0; i<N1; i++) {
			for(j=0; j<N2; j++) {
				f[i*N2+j] = f_r[i*N2+j] + f_i[i*N2+j]*I;
			}
		}
	}
	free(f_r);
	free(f_i);
	MPI_Bcast(f, N1*N2, FLOAT_COMPLEX, 0, MPI_COMM_WORLD);
	MPI_Bcast(mask, N1*N2, MPI_FLOAT, 0, MPI_COMM_WORLD);

	mri(img, f, mask, lambda, N1, N2);

	if (mpi_rank == 0) {
		imnorm(img, N1, N2);
		imwrite(img, N1, N2, fname_out);
	}
	
	free(f);
	free(img);
	free(mask);

	MPI_Finalize();

	return 0;
}
Example #3
0
int imread(float **img, int *width, int *height, char *fname) {

	FILE* fin = fopen(fname, "rb");
	if (!fin) {
		printf("cannot open input file: %s\n", fname);
		return -1;
	}

	BITMAPFILEHEADER bitHead;
	BITMAPINFOHEADER bitInfoHead;
	WORD fileType;
	int i;
	int j;

	fread(&fileType, 1, sizeof(WORD), fin);
	if (fileType != 0x4d42) {
		printf("%s is not a bmp file\n", fname);
		return 1;
	}

	fread(&bitHead, 1, sizeof(BITMAPFILEHEADER), fin);
	fread(&bitInfoHead, 1, sizeof(BITMAPINFOHEADER), fin);
	fseek(fin, 4*bitInfoHead.biClrUsed, SEEK_CUR);

	*width	= bitInfoHead.biWidth;
	*height = bitInfoHead.biHeight;

	int w = bitInfoHead.biWidth;
	int h = bitInfoHead.biHeight; 

	float* limg = (float*) calloc(w*h, sizeof(float));

	if (bitInfoHead.biBitCount == 8) {
		for (i=h-1; i>=0; i--) {
			for (j=0; j<w; j++) {
				unsigned char imbyte = 0;
				fread(&imbyte, 1, sizeof(char), fin);
				limg[j*h+i] = 1.0*imbyte;
			}
			if (w%4 != 0) {
				int p;
				for (p=0; p<4-(w%4); p++) {
					unsigned char k = 0;
					fread(&k, 1, sizeof(char), fin);
				}
			}
		}	
	}
	else if (bitInfoHead.biBitCount == 24) {
		for (i=h; i>=0; i--) {
			for (j=0; j<w; j++) {
				unsigned char r = 0;
				unsigned char g = 0;
				unsigned char b = 0;

				fread(&r, 1, sizeof(char), fin);
				fread(&g, 1, sizeof(char), fin);
				fread(&b, 1, sizeof(char), fin);
				limg[j*h+i] = (1.0*r+1.0*g+1.0*b)/3.0;
				fread(&r, 1, sizeof(char), fin);
			}
			if (w%4 != 0) {
				int p;
				for (p=0; p<4-(w%4); p++) {
					unsigned int k = 0;
					fread(&k, 1, sizeof(unsigned int), fin);
				}
			}
		}
	}
	imnorm(limg, w, h);

	*img = limg;

	return 0;
}