33 const char *InputFile;
35 const char *OutputFile;
51 puts(
"Total variation deconvolution demo, P. Getreuer 2011-2012\n\n"
52 "Usage: tvdeconv [param:value ...] input output\n\n"
53 "where \"input\" and \"output\" are "
56 puts(
" K:<kernel> blur kernel for deconvolution");
57 puts(
" K:disk:<radius> filled disk kernel");
58 puts(
" K:gaussian:<sigma> Gaussian kernel");
59 puts(
" K:<file> read kernel from text or image file");
60 puts(
" lambda:<value> fidelity weight");
61 puts(
" noise:<model> noisy model");
62 puts(
" noise:gaussian additive Gaussian noise (default)");
63 puts(
" noise:laplace Laplace noise");
64 puts(
" noise:poisson Poisson noise");
65 puts(
" f:<file> input file (alternative syntax)");
66 puts(
" u:<file> output file (alternative syntax)");
68 puts(
" jpegquality:<number> quality for saving JPEG images (0 to 100)");
71 " imblur noise:gaussian:5 K:disk:2 input.bmp blurry.bmp\n");
74 int TvDeconv(
image u,
image f,
image Kernel, num Lambda,
const char *Noise);
77 int main(
int argc,
char **argv)
80 image f = NullImage, u = NullImage;
83 if(!
ParseParams(&Params, argc, (
const char **)argv))
91 fputs(
"Out of memory.\n", stderr);
100 fprintf(stderr,
"Error writing to \"%s\".\n", Params.
OutputFile);
106 FreeImageObj(Params.
Kernel);
111 int TvDeconv(
image u,
image f,
image Kernel, num Lambda,
const char *Noise)
118 fputs(
"Out of memory.\n", stderr);
123 fprintf(stderr,
"Unknown noise model, \"%s\".\n", Noise);
136 fputs(
"Error in computation.\n", stderr);
146 static const char *DefaultOutputFile = (
char *)
"out.bmp";
147 const char *Param, *Value;
159 Params->
Kernel = NullImage;
160 Params->
Noise =
"gaussian";
172 Skip = (argv[k][0] ==
'-') ? 1 : 0;
174 k, &argv[k][Skip], argc, argv,
":");
190 if(!strcmp(Param,
"f") || !strcmp(Param,
"input"))
194 fprintf(stderr,
"Expected a value for option %s.\n", Param);
199 else if(!strcmp(Param,
"u") || !strcmp(Param,
"output"))
203 fprintf(stderr,
"Expected a value for option %s.\n", Param);
208 else if(!strcmp(Param,
"K"))
212 fprintf(stderr,
"Expected a value for option %s.\n", Param);
218 else if(!strcmp(Param,
"lambda"))
222 else if(NumValue <= 0)
224 fputs(
"Parameter lambda must be positive.\n", stderr);
228 Params->
Lambda = (int)NumValue;
230 else if(!strcmp(Param,
"noise"))
234 fprintf(stderr,
"Expected a value for option %s.\n", Param);
238 Params->
Noise = Value;
240 else if(!strcmp(Param,
"jpegquality"))
244 else if(NumValue < 0 || 100 < NumValue)
246 fputs(
"JPEG quality must be between 0 and 100.\n", stderr);
254 fprintf(stderr,
"Unknown option \"%s\".\n", Param);