def transform_mnist_rts(in_data):
img, label = in_data
img = img[0] # Remove channel axis for skimage manipulation
# Rotate
img = transform.rotate(img, angle=np.random.uniform(-45, 45),
resize=True, mode='constant')
# Scale
img = transform.rescale(img, scale=np.random.uniform(0.7, 1.2),
mode='constant')
# Translate
h, w = img.shape
if h >= img_size[0] or w >= img_size[1]:
img = transform.resize(img, output_shape=img_size, mode='constant')
img = img.astype(np.float32)
else:
img_canvas = np.zeros(img_size, dtype=np.float32)
ymin = np.random.randint(0, img_size[0] - h)
xmin = np.random.randint(0, img_size[1] - w)
img_canvas[ymin:ymin+h, xmin:xmin+w] = img
img = img_canvas
img = img[np.newaxis, :] # Add the bach channel back
return img, label
python类rescale()的实例源码
def read_rgb_image(filepath):
rgb_img = ndimage.imread(filepath)
width = height = 224
img_width = rgb_img.shape[1]
img_height = rgb_img.shape[0]
# scale such that smaller dimension is 256
if img_width < img_height:
factor = 256.0 / img_width
else:
factor = 256.0 / img_height
rgb_img = transform.rescale(rgb_img, factor, preserve_range=True)
# crop randomly
width_start = np.random.randint(0, rgb_img.shape[1] - width)
height_start = np.random.randint(0, rgb_img.shape[0] - height)
rgb_img = rgb_img[height_start:height_start + height, width_start:width_start + width]
return rgb_img
def _rotate_and_rescale(xs, ys):
"""Rotate images and labels and scale image and labels by a certain factor.
Both need to swap axis from [depth, height, width] to [height, width, depth]
required by skimage.transform library.
"""
degree = np.int(np.random.uniform(low=-3, high=5))
factor = np.random.uniform(low=0.9, high=1.1)
# swap axis
HWC_xs, HWC_ys = [np.transpose(item, [1, 2, 0]) for item in [xs, ys]]
# rotate and rescale
HWC_xs, HWC_ys = [rotate(item, degree, mode='symmetric', preserve_range=True) for item in [HWC_xs, HWC_ys]]
HWC_xs, HWC_ys = [rescale(item, factor, mode='symmetric', preserve_range=True) for item in [HWC_xs, HWC_ys]]
# swap back
xs, ys = [np.transpose(item, [2, 0, 1]) for item in [HWC_xs, HWC_ys]]
return xs, ys
utils.py 文件源码
项目:Semantic-Segmentation-using-Adversarial-Networks
作者: oyam
项目源码
文件源码
阅读 21
收藏 0
点赞 0
评论 0
def resize_img_with_max_size(img, max_size=500*500):
"""Resize image with max size (height x width)"""
from skimage.transform import rescale
height, width = img.shape[:2]
scale = max_size / (height * width)
resizing_scale = 1
if scale < 1:
resizing_scale = np.sqrt(scale)
img = rescale(img, resizing_scale, preserve_range=True)
img = img.astype(np.uint8)
return img, resizing_scale
# -----------------------------------------------------------------------------
# Chainer Util
# -----------------------------------------------------------------------------
def main(args):
"""
Entry point.
"""
# load the image
img = imread(args.input)
if img.ndim == 2:
img = gray2rgb(img)
elif img.shape[2] == 4:
img = img[:, :, :3]
upper_dim = max(img.shape[:2])
if upper_dim > args.max_dim:
img = rescale(img, args.max_dim/float(upper_dim), order=3)
# compute saliency
start = timeit.default_timer()
img_sal = compute_saliency(img)
runtime = timeit.default_timer() - start
print("Took {0} seconds.".format(runtime))
# save image
(fname, ext) = os.path.splitext(args.input)
out_path = fname + "_saliency" + ext
imsave(out_path, img_sal)
def test_upsample(self):
h, w = 5, 5
scale = 2
mat = np.random.rand(h, w).astype('float32')
inp = self.make_variable(mat)
inp = tf.reshape(inp, [1, h, w, 1])
output = BilinearUpSample('upsample', inp, scale)
res = self.run_variable(output)[0,:,:,0]
from skimage.transform import rescale
res2 = rescale(mat, scale)
diff = np.abs(res2 - res)
# not equivalent to rescale on edge?
diff[0,:] = 0
diff[:,0] = 0
if not diff.max() < 1e-4:
import IPython;
IPython.embed(config=IPython.terminal.ipapp.load_default_config())
self.assertTrue(diff.max() < 1e-4)
def TF_zoom(x, scale=1.0, target=None):
assert len(x.shape) == 3
h, w, nc = x.shape
assert h == w
# Zoom
xc = rescale(x, scale)
diff = h - xc.shape[0]
d = int(np.floor(diff / 2.0))
if d >= 0:
padding = ((d, d),(d, d),(0,0))
if diff % 2 != 0:
padding = ((d,d+1), (d,d + 1),(0,0))
return np.pad(xc, padding, mode='edge')
else:
return xc[-d:h-d, -d:w-d].reshape(h, w, nc)
def split_tiles(image, shape, overlap=16):
""" Rescale and split the input images to get several overlapping images of a given shape.
*** The inpput must be CHANNELS FIRST ***
The input image is rescaled so that height matches the output height.
It is split into possibly overlapping tiles, each sized to match the output shape
"""
# image_channels = image.shape[0]
image_height = image.shape[-2]
# image_width = image.shape[-1]
output_height = shape[-2]
output_width = shape[-1]
# Rescale to match vertical size
scale = output_height / float(image_height)
scaled_image = rescale(image.transpose(1, 2, 0), (scale, scale), order=0, preserve_range=True).transpose(2, 0, 1)
scaled_width = scaled_image.shape[-1]
if scaled_width < output_width:
padding = output_width - scaled_width
if len(scaled_image.shape) == 3:
scaled_image = np.pad(scaled_image, ((0, 0), (0, 0), (padding / 2, padding - padding / 2)), mode='constant')
else:
scaled_image = np.pad(scaled_image, ((0, 0), (padding / 2, padding - padding / 2)), mode='constant')
# Since the input is not a multiple of the output width, we will evenly divide the image
# to produce overlapping tiles. Work it out.
# -- The last tile always fits, and does not overlap with the _next_ tile (there is none)
# -- The remaining tiles each overlap with the following tile. The width of uncovered portion
# evenly divides the rest of the strip
# -- I need an integer number of tiles to cover the remaining strip (so I use a ceil)
num_tiles = 1 + int(np.ceil(max(0, (scaled_width - output_width)) / float(output_width - overlap)))
for x in np.linspace(0, scaled_width - output_width, num_tiles):
yield scaled_image[:, :, int(x):int(x) + output_width]
augmentation.py 文件源码
项目:Nature-Conservancy-Fish-Image-Prediction
作者: Brok-Bucholtz
项目源码
文件源码
阅读 25
收藏 0
点赞 0
评论 0
def rand_scale(image):
scale = choice(np.arange(0.5, 0.9, 0.1))
return rescale(image, scale, preserve_range=True).astype(np.uint8)
def load_image(source,
scale=1,
gray=False,
memory=Memory(cachedir=None)):
data_dir = get_data_dirs()[0]
if source == 'face':
image = face(gray=gray)
image = image.astype(np.float32) / 255
if image.ndim == 2:
image = image[..., np.newaxis]
if scale != 1:
image = memory.cache(rescale)(image, scale=scale)
return image
elif source == 'lisboa':
image = imread(join(data_dir, 'images', 'lisboa.jpg'), as_grey=gray)
image = image.astype(np.float32) / 255
if image.ndim == 2:
image = image[..., np.newaxis]
if scale != 1:
image = memory.cache(rescale)(image, scale=scale)
return image
elif source == 'aviris':
image = open_image(
join(data_dir,
'aviris',
'f100826t01p00r05rdn_b/'
'f100826t01p00r05rdn_b_sc01_ort_img.hdr'))
image = np.array(image.open_memmap(), dtype=np.float32)
good_bands = list(range(image.shape[2]))
good_bands.remove(110)
image = image[:, :, good_bands]
indices = image == -50
image[indices] = -1
image[~indices] -= np.min(image[~indices])
image[~indices] /= np.max(image[~indices])
return image
else:
raise ValueError('Data source is not known')
def _firstImg(self, img):
if self.scale_factor is None:
# determine so that smaller image size has 50 px
self.scale_factor = 100 / min(img.shape)
img = rescale(img, self.scale_factor)
self._m = MaskedMovingAverage(shape=img.shape)
if self.ksize is None:
self.ksize = max(3, int(min(img.shape) / 10))
self._first = False
return img
def process_image(img):
return 2 * color.rgb2gray(transform.rescale(img[34:194], 0.5)) - 1
style_transfer.py 文件源码
项目:deepdream-neural-style-transfer
作者: rdcolema
项目源码
文件源码
阅读 28
收藏 0
点赞 0
评论 0
def _rescale_net(self, img):
"""
Rescales the network to fit a particular image.
"""
# get new dimensions and rescale net + transformer
new_dims = (1, img.shape[2]) + img.shape[:2]
self.net.blobs["data"].reshape(*new_dims)
self.transformer.inputs["data"] = new_dims
def gen_imagescale(image, start_size=90, end_size=140, step_size=10, division_factor=120.0):
for i in range(start_size,end_size,step_size):
scale = i/division_factor
yield rescale(image,(scale,scale)), scale
def gen_imagescale(image, start_size=90, end_size=140, step_size=10, division_factor=120.0):
for i in range(start_size,end_size,step_size):
scale = i/division_factor
yield rescale(image,(scale,scale)),scale
def rescale_frame(frame, scale):
if scale == 1:
return frame
return rescale(frame, scale)
def __init__(self, frames, rect, config=None):
"""Track a target form frames."""
self.frame_id = 0
self.frames = frames
self.config = config or DEFAULT_CONFIG
self.scale = self.config["rescale"]
self.target = rescale_rect(rect, self.scale)
def __init__(self, config):
self.config = config or DEFAULT_CONFIG
self.scale = self.config["rescale"]
def __call__(self, img):
scale_factor = self.max_width/float(img.shape[1])
if scale_factor <= 1:
img_small = transform.rescale(img, scale_factor, mode='constant')
else:
scale_factor = 1.0
img_small = img
return img_small, scale_factor
def _try_larger_image(self, roi, cur_text, cur_mrz, filter_order=3):
"""Attempts to improve the OCR result by scaling the image. If the new mrz is better, returns it, otherwise returns
the old mrz."""
if roi.shape[1] <= 700:
scale_by = int(1050.0/roi.shape[1] + 0.5)
roi_lg = transform.rescale(roi, scale_by, order=filter_order, mode='constant')
new_text = ocr(roi_lg)
new_mrz = MRZ.from_ocr(new_text)
new_mrz.aux['method'] = 'rescaled(%d)' % filter_order
if new_mrz.valid_score > cur_mrz.valid_score:
cur_mrz = new_mrz
cur_text = new_text
return cur_text, cur_mrz
def _rescale(self, bands):
""" Rescale bands """
# self.output("Rescaling", normal=True, arrow=True)
for key, band in enumerate(bands):
print "processing"
# self.output("band %s" % self.bands[key], normal=True, color='green', indent=1)
bands[key] = sktransform.rescale(band, 2)
bands[key] = (bands[key] * 65535).astype('uint16')
return bands
def addImg(self, i):
img = self._read(i)
if self._first:
img = self._firstImg(img)
elif self.scale_factor != 1:
img = rescale(img, self.scale_factor)
try:
f = FitHistogramPeaks(img)
except AssertionError:
return
#sp = getSignalPeak(f.fitParams)
mn = getSignalMinimum(f.fitParams)
# non-backround indices:
ind = img > mn # sp[1] - self.nstd * sp[2]
# blur:
# blurred = minimum_filter(img, 3)#remove artefacts
#blurred = maximum_filter(blurred, self.ksize)
# blurred = img
# gblurred = gaussian_filter(img, self.ksize)
# ind = minimum_filter(ind, self.ksize)
nind = np.logical_not(ind)
gblurred = maskedFilter(img, nind, ksize=2 * self.ksize,
fill_mask=False,
fn="mean")
#blurred[ind] = gblurred[ind]
# scale [0-1]:
mn = img[nind].mean()
if np.isnan(mn):
mn = 0
mx = gblurred[ind].max()
gblurred -= mn
gblurred /= (mx - mn)
# img -= mn
# img /= (mx - mn)
# ind = np.logical_and(ind, img > self._m.avg)
self._m.update(gblurred, ind)
self.bglevel.append(mn)
self._mx += mx
self._n += 1
# import pylab as plt
# plt.imshow(self._m.avg)
# plt.show()
make_wkt.py 文件源码
项目:kaggle-satellite-imagery-feature-detection
作者: toshi-k
项目源码
文件源码
阅读 25
收藏 0
点赞 0
评论 0
def img_to_wkt(img, scale_rate, target_name, W, H, Xmax, Ymin, t_value, cla):
W_dash = W * W / (W + 1)
H_dash = H * H / (H + 1)
if scale_rate < 0.99:
img_tiny = rescale(img, scale_rate)
else:
img_tiny = img
bmp_image_path = '_temp/' + target_name + '.bmp'
target_json_path = '_temp/' + target_name + '.json'
with warnings.catch_warnings():
warnings.simplefilter("ignore")
imsave(bmp_image_path, img_tiny)
os.system('potrace -a 2 -t ' + str(t_value) + ' -b geojson -i ' + bmp_image_path + ' -o ' + target_json_path)
f = open(target_json_path)
data = json.load(f)
f.close()
os.remove(target_json_path)
os.remove(bmp_image_path)
# type of 'data' is feature collection
# we only need focus on features
features = data['features']
list_polygons = list()
for i in range(len(features)):
shapely_polygon = shape(geojson.loads(json.dumps(features[i]['geometry'])))
if scale_rate < 0.99:
shapely_polygon = scale(shapely_polygon, 1/scale_rate, 1/scale_rate, origin=(0, 0))
list_polygons.append(shapely_polygon.buffer(0.0))
multi = MultiPolygon(list_polygons)
multi = scale(multi, 1, -1, 1, origin=(float(W)/2, float(H)/2))
multi = scale(multi, Xmax / W_dash, Ymin / H_dash, origin=(0, 0))
if cla != 6:
multi = multi.simplify(1e-6, preserve_topology=True)
else:
multi = multi.simplify(1e-5, preserve_topology=True)
multi = multi.buffer(0)
if multi.type == 'Polygon':
multi = MultiPolygon([multi])
return multi
# tpex's evaluation code can validate topology more strictly
# https://github.com/cxz/tpex