Ejemplo n.º 1
0
def main(argv):
    parser = ArgumentParser(argv[0], description=__doc__)
    parser.add_argument('model', type=str)
    parser.add_argument('--num_rows', '-r', type=int, default=256)
    parser.add_argument('--num_cols', '-c', type=int, default=256)
    parser.add_argument('--data', '-d', type=str, default=None)
    parser.add_argument('--log', '-L', type=int, default=0)
    parser.add_argument('--output', '-o', type=str, default='sample.png')
    parser.add_argument('--margin', '-M', type=int, default=8)

    args = parser.parse_args(argv[1:])

    model = Experiment(args.model)['model']

    if isinstance(model, PatchRIDE):
        img = model.sample()[0]
        imwrite(args.output, imformat(img, vmin=0, vmax=255, symmetric=False))

    else:
        if args.data is None:
            # initialize image with white noise
            img_init = randn(1, args.num_rows + args.margin * 2, args.num_cols
                             + args.margin * 2, sum(model.num_channels)) / 10.
            img = model.sample(img_init)

            if args.log:
                # linearize and gamma-correct
                img = power(exp(img), .45)

            if args.margin > 0:
                img = img[:, args.margin:-args.margin,
                          args.margin:-args.margin]

            if img.shape[-1] == 3:
                img[img > 255.] = 255.
                img[img < 0.] = 0.
                imwrite(args.output, asarray(img[0, :, :, :], dtype='uint8'))
            else:
                imwrite(args.output, imformat(img[0, :, :, 0], perc=99))

        else:
            if args.data.lower()[-4:] in ['.gif', '.png', '.jpg', 'jpeg']:
                data = imread(args.data)[None]
                vmin, vmax = 0, 255
            else:
                data = loadmat(args.data)['data']
                vmin = percentile(data, 0.02)
                vmax = percentile(data, 98.)

            if data.ndim < 4:
                data = data[:, :, :, None]

            if isinstance(model, MultiscaleRIDE):
                num_channels = 1
            elif isinstance(model, ColorRIDE):
                num_channels = 3
            else:
                num_channels = model.num_channels

            num_pixels = (args.num_rows + args.margin) * (args.num_cols +
                                                          args.margin * 2)

            # initialize image with white noise (but correct marginal distribution)
            img_init = []
            for c in range(num_channels):
                indices = randint(data.size // num_channels, size=num_pixels)
                img_init.append(
                    asarray(data[:, :, :, c].ravel()[indices],
                            dtype=float).reshape(
                                1, args.num_rows + args.margin,
                                args.num_cols + args.margin * 2, 1))
            img_init = concatenate(img_init, 3)

            img_init[img_init < vmin] = vmin
            img_init[img_init > vmax] = vmax

            if isinstance(model, MultiscaleRIDE) or isinstance(
                    model, ColorRIDE):
                data = model._transform(data)
                idx = randint(data.shape[0])
                img = model.sample(
                    img_init,
                    #				min_values=data[idx].min(1).min(0),
                    #				max_values=data[idx].max(1).max(0))
                    min_values=data.min(2).min(1).min(0),
                    max_values=data.max(2).max(1).max(0))
            else:
                #			img_init[:] = img_init.mean()
                img = model.sample(img_init,
                                   min_values=percentile(data, .1),
                                   max_values=percentile(data, 99.8))
    #				min_values=percentile(data, 1.),
    #				max_values=percentile(data, 96.))

            if args.log:
                # linearize and gamma-correct
                img = power(exp(img), .45)
                vmin = power(exp(vmin), .45)
                vmax = power(exp(vmax), .45)

            try:
                savez(args.output.split('.')[0] + '.npz', sample=img)
            except:
                pass

            if args.margin > 0:
                img = img[:, args.margin:, args.margin:-args.margin]

            if num_channels == 1:
                imwrite(
                    args.output,
                    imformat(img[0, :, :, 0],
                             vmin=vmin,
                             vmax=vmax,
                             symmetric=False))
            else:
                imwrite(
                    args.output,
                    imformat(img[0], vmin=vmin, vmax=vmax, symmetric=False))

    return 0
Ejemplo n.º 2
0
def main(argv):
	parser = ArgumentParser(argv[0], description=__doc__)
	parser.add_argument('model',            type=str)
	parser.add_argument('--num_rows', '-r', type=int, default=256)
	parser.add_argument('--num_cols', '-c', type=int, default=256)
	parser.add_argument('--data',     '-d', type=str, default=None)
	parser.add_argument('--log',      '-L', type=int, default=0)
	parser.add_argument('--output',   '-o', type=str, default='sample.png')
	parser.add_argument('--margin',   '-M', type=int, default=8)

	args = parser.parse_args(argv[1:])

	model = Experiment(args.model)['model']

	if isinstance(model, PatchRIDE):
		img = model.sample()[0]
		imwrite(args.output, imformat(img, vmin=0, vmax=255, symmetric=False))

	else:
		if args.data is None:
			# initialize image with white noise
			img_init = randn(1,
				args.num_rows + args.margin * 2,
				args.num_cols + args.margin * 2,
				sum(model.num_channels)) / 10.
			img = model.sample(img_init)

			if args.log:
				# linearize and gamma-correct
				img = power(exp(img), .45)

			if args.margin > 0:
				img = img[:, args.margin:-args.margin, args.margin:-args.margin]

			if img.shape[-1] == 3:
				img[img > 255.] = 255.
				img[img < 0.] = 0.
				imwrite(args.output, asarray(img[0, :, :, :], dtype='uint8'))
			else:
				imwrite(args.output, imformat(img[0, :, :, 0], perc=99))

		else:
			if args.data.lower()[-4:] in ['.gif', '.png', '.jpg', 'jpeg']:
				data = imread(args.data)[None]
				vmin, vmax = 0, 255
			else:
				data = loadmat(args.data)['data']
				vmin = percentile(data, 0.02)
				vmax = percentile(data, 98.)

			if data.ndim < 4:
				data = data[:, :, :, None]

			if isinstance(model, MultiscaleRIDE):
				num_channels = 1
			elif isinstance(model, ColorRIDE):
				num_channels = 3
			else:
				num_channels = model.num_channels

			num_pixels = (args.num_rows + args.margin) * (args.num_cols + args.margin * 2)

			# initialize image with white noise (but correct marginal distribution)
			img_init = []
			for c in range(num_channels):
				indices = randint(data.size // num_channels, size=num_pixels)
				img_init.append(
					asarray(data[:, :, :, c].ravel()[indices], dtype=float).reshape(
					1,
					args.num_rows + args.margin,
					args.num_cols + args.margin * 2, 1))
			img_init = concatenate(img_init, 3)

			img_init[img_init < vmin] = vmin
			img_init[img_init > vmax] = vmax

			if isinstance(model, MultiscaleRIDE) or isinstance(model, ColorRIDE):
				data = model._transform(data)
				idx = randint(data.shape[0])
				img = model.sample(img_init,
	#				min_values=data[idx].min(1).min(0),
	#				max_values=data[idx].max(1).max(0))
					min_values=data.min(2).min(1).min(0),
					max_values=data.max(2).max(1).max(0))
			else:
	#			img_init[:] = img_init.mean()
				img = model.sample(img_init,
					min_values=percentile(data, .1),
					max_values=percentile(data, 99.8))
	#				min_values=percentile(data, 1.),
	#				max_values=percentile(data, 96.))

			if args.log:
				# linearize and gamma-correct
				img = power(exp(img), .45)
				vmin = power(exp(vmin), .45)
				vmax = power(exp(vmax), .45)

			try:
				savez(args.output.split('.')[0] + '.npz', sample=img)
			except:
				pass

			if args.margin > 0:
				img = img[:, args.margin:, args.margin:-args.margin]

			if num_channels == 1:
				imwrite(args.output,
					imformat(img[0, :, :, 0], vmin=vmin, vmax=vmax, symmetric=False))
			else:
				imwrite(args.output,
					imformat(img[0], vmin=vmin, vmax=vmax, symmetric=False))

	return 0