Beispiel #1
0
    def _get_scaled_img(self, npimg, scale):
        get_base_scale = lambda s, w, h: max(self.target_size[0] / float(
            h), self.target_size[1] / float(w)) * s
        img_h, img_w = npimg.shape[:2]

        if scale is None:
            if npimg.shape[:2] != (self.target_size[1], self.target_size[0]):
                # resize
                npimg = cv2.resize(npimg,
                                   self.target_size,
                                   interpolation=cv2.INTER_CUBIC)
            return [npimg], [(0.0, 0.0, 1.0, 1.0)]
        elif isinstance(scale, float):
            # scaling with center crop
            base_scale = get_base_scale(scale, img_w, img_h)
            npimg = cv2.resize(npimg,
                               dsize=None,
                               fx=base_scale,
                               fy=base_scale,
                               interpolation=cv2.INTER_CUBIC)

            o_size_h, o_size_w = npimg.shape[:2]
            if npimg.shape[0] < self.target_size[1] or npimg.shape[
                    1] < self.target_size[0]:
                newimg = np.zeros(
                    (max(self.target_size[1], npimg.shape[0]),
                     max(self.target_size[0], npimg.shape[1]), 3),
                    dtype=np.uint8)
                newimg[:npimg.shape[0], :npimg.shape[1], :] = npimg
                npimg = newimg

            windows = sw.generate(npimg, sw.DimOrder.HeightWidthChannel,
                                  self.target_size[0], self.target_size[1],
                                  0.2)

            rois = []
            ratios = []
            for window in windows:
                indices = window.indices()
                roi = npimg[indices]
                rois.append(roi)
                ratio_x, ratio_y = float(indices[1].start) / o_size_w, float(
                    indices[0].start) / o_size_h
                ratio_w, ratio_h = float(indices[1].stop -
                                         indices[1].start) / o_size_w, float(
                                             indices[0].stop -
                                             indices[0].start) / o_size_h
                ratios.append((ratio_x, ratio_y, ratio_w, ratio_h))

            return rois, ratios
        elif isinstance(scale, tuple) and len(scale) == 2:
            # scaling with sliding window : (scale, step)
            base_scale = get_base_scale(scale[0], img_w, img_h)
            npimg = cv2.resize(npimg,
                               dsize=None,
                               fx=base_scale,
                               fy=base_scale,
                               interpolation=cv2.INTER_CUBIC)
            o_size_h, o_size_w = npimg.shape[:2]
            if npimg.shape[0] < self.target_size[1] or npimg.shape[
                    1] < self.target_size[0]:
                newimg = np.zeros(
                    (max(self.target_size[1], npimg.shape[0]),
                     max(self.target_size[0], npimg.shape[1]), 3),
                    dtype=np.uint8)
                newimg[:npimg.shape[0], :npimg.shape[1], :] = npimg
                npimg = newimg

            window_step = scale[1]

            windows = sw.generate(npimg, sw.DimOrder.HeightWidthChannel,
                                  self.target_size[0], self.target_size[1],
                                  window_step)

            rois = []
            ratios = []
            for window in windows:
                indices = window.indices()
                roi = npimg[indices]
                rois.append(roi)
                ratio_x, ratio_y = float(indices[1].start) / o_size_w, float(
                    indices[0].start) / o_size_h
                ratio_w, ratio_h = float(indices[1].stop -
                                         indices[1].start) / o_size_w, float(
                                             indices[0].stop -
                                             indices[0].start) / o_size_h
                ratios.append((ratio_x, ratio_y, ratio_w, ratio_h))

            return rois, ratios
        elif isinstance(scale, tuple) and len(scale) == 3:
            # scaling with ROI : (want_x, want_y, scale_ratio)
            base_scale = get_base_scale(scale[2], img_w, img_h)
            npimg = cv2.resize(npimg,
                               dsize=None,
                               fx=base_scale,
                               fy=base_scale,
                               interpolation=cv2.INTER_CUBIC)
            ratio_w = self.target_size[0] / float(npimg.shape[1])
            ratio_h = self.target_size[1] / float(npimg.shape[0])

            want_x, want_y = scale[:2]
            ratio_x = want_x - ratio_w / 2.
            ratio_y = want_y - ratio_h / 2.
            ratio_x = max(ratio_x, 0.0)
            ratio_y = max(ratio_y, 0.0)
            if ratio_x + ratio_w > 1.0:
                ratio_x = 1. - ratio_w
            if ratio_y + ratio_h > 1.0:
                ratio_y = 1. - ratio_h

            roi = self._crop_roi(npimg, ratio_x, ratio_y)
            return [roi], [(ratio_x, ratio_y, ratio_w, ratio_h)]
Beispiel #2
0
def compute_windows(image,pixels,overlap):
    im = Image.open('/Users/ben/Documents/DeepForest/data/2017_OSBS_3_400000_3287000_image.tif')
    data = np.array(im)    
    windows = sw.generate(image, sw.DimOrder.HeightWidthChannel, 250, 0.05)
    return(windows)
    def _get_scaled_img(self, npimg, scale, use_pad=False, box_size=None):
        get_base_scale = lambda s, w, h: max(self.target_size[0] / float(
            h), self.target_size[1] / float(w)) * s
        img_h, img_w = npimg.shape[:2]

        if scale is None:
            if npimg.shape[:2] != (self.target_size[1], self.target_size[0]):
                # resize
                npimg = cv2.resize(npimg,
                                   self.target_size,
                                   interpolation=cv2.INTER_CUBIC)
            return [npimg], [(0.0, 0.0, 1.0, 1.0)]

        elif isinstance(scale, float) and use_pad:
            print('scale' + str(scale))
            print(npimg.shape)
            npimg = cv2.resize(npimg,
                               dsize=None,
                               fx=scale,
                               fy=scale,
                               interpolation=cv2.INTER_CUBIC)
            bbox = [box_size, np.max([box_size, np.shape(npimg)[1]])]
            # pad height
            pad = np.zeros((4, ), dtype=int)
            h, w, _ = np.shape(npimg)
            h = np.min([bbox[0], h])
            bbox[0] = np.ceil(bbox[0] / 8) * 8
            bbox[1] = np.max([bbox[1], w])
            bbox[1] = np.ceil(bbox[1] / 8) * 8
            pad[0] = int(np.floor((bbox[0] - h) / 2))  # up
            pad[1] = int(np.floor((bbox[1] - w) / 2))  # left
            pad[2] = int(bbox[0] - h - pad[0])  # down
            pad[3] = int(bbox[1] - w - pad[1])  # right

            pad_up = np.ones(
                (pad[0], np.shape(npimg)[1], np.shape(npimg)[2])) * 0.5
            npimg = np.concatenate([pad_up, npimg], axis=0)
            pad_left = np.ones(
                (np.shape(npimg)[0], pad[1], np.shape(npimg)[2])) * 0.5
            npimg = np.concatenate([pad_left, npimg], axis=1)
            pad_down = np.ones(
                (pad[2], np.shape(npimg)[1], np.shape(npimg)[2])) * 0.5
            npimg = np.concatenate([npimg, pad_down], axis=0)
            pad_right = np.ones(
                (np.shape(npimg)[0], pad[3], np.shape(npimg)[2])) * 0.5
            npimg = np.concatenate([npimg, pad_right], axis=1)

            return npimg, pad

        elif isinstance(scale, float):
            # scaling with center crop
            base_scale = get_base_scale(scale, img_w, img_h)
            npimg = cv2.resize(npimg,
                               dsize=None,
                               fx=base_scale,
                               fy=base_scale,
                               interpolation=cv2.INTER_CUBIC)

            o_size_h, o_size_w = npimg.shape[:2]
            if npimg.shape[0] < self.target_size[1] or npimg.shape[
                    1] < self.target_size[0]:
                newimg = np.zeros(
                    (max(self.target_size[1], npimg.shape[0]),
                     max(self.target_size[0], npimg.shape[1]), 3),
                    dtype=np.uint8)
                newimg[:npimg.shape[0], :npimg.shape[1], :] = npimg
                npimg = newimg

            windows = sw.generate(npimg, sw.DimOrder.HeightWidthChannel,
                                  self.target_size[0], self.target_size[1],
                                  0.2)

            rois = []
            ratios = []
            for window in windows:
                indices = window.indices()
                roi = npimg[indices]
                rois.append(roi)
                ratio_x, ratio_y = float(indices[1].start) / o_size_w, float(
                    indices[0].start) / o_size_h
                ratio_w, ratio_h = float(indices[1].stop -
                                         indices[1].start) / o_size_w, float(
                                             indices[0].stop -
                                             indices[0].start) / o_size_h
                ratios.append((ratio_x, ratio_y, ratio_w, ratio_h))

            return rois, ratios

        elif isinstance(scale, tuple) and len(scale) == 2:
            base_scale = get_base_scale(scale[0], img_w, img_h)
            npimg = cv2.resize(npimg,
                               dsize=None,
                               fx=base_scale,
                               fy=base_scale,
                               interpolation=cv2.INTER_CUBIC)
            o_size_h, o_size_w = npimg.shape[:2]
            if npimg.shape[0] < self.target_size[1] or npimg.shape[
                    1] < self.target_size[0]:
                newimg = np.zeros(
                    (max(self.target_size[1], npimg.shape[0]),
                     max(self.target_size[0], npimg.shape[1]), 3),
                    dtype=np.uint8)
                newimg[:npimg.shape[0], :npimg.shape[1], :] = npimg
                npimg = newimg

            window_step = scale[1]

            windows = sw.generate(npimg, sw.DimOrder.HeightWidthChannel,
                                  self.target_size[0], self.target_size[1],
                                  window_step)

            rois = []
            ratios = []
            for window in windows:
                indices = window.indices()
                roi = npimg[indices]
                rois.append(roi)
                ratio_x, ratio_y = float(indices[1].start) / o_size_w, float(
                    indices[0].start) / o_size_h
                ratio_w, ratio_h = float(indices[1].stop -
                                         indices[1].start) / o_size_w, float(
                                             indices[0].stop -
                                             indices[0].start) / o_size_h
                ratios.append((ratio_x, ratio_y, ratio_w, ratio_h))

            return rois, ratios
        elif isinstance(scale, tuple) and len(scale) == 3:
            base_scale = get_base_scale(scale[2], img_w, img_h)
            npimg = cv2.resize(npimg,
                               dsize=None,
                               fx=base_scale,
                               fy=base_scale,
                               interpolation=cv2.INTER_CUBIC)
            ratio_w = self.target_size[0] / float(npimg.shape[1])
            ratio_h = self.target_size[1] / float(npimg.shape[0])

            want_x, want_y = scale[:2]
            ratio_x = want_x - ratio_w / 2.
            ratio_y = want_y - ratio_h / 2.
            ratio_x = max(ratio_x, 0.0)
            ratio_y = max(ratio_y, 0.0)
            if ratio_x + ratio_w > 1.0:
                ratio_x = 1. - ratio_w
            if ratio_y + ratio_h > 1.0:
                ratio_y = 1. - ratio_h

            roi = self._crop_roi(npimg, ratio_x, ratio_y)

            return [roi], [(ratio_x, ratio_y, ratio_w, ratio_h)]
Beispiel #4
0
def compute_windows(image, pixels, overlap):
    im = Image.open(image)
    data = np.array(im)
    windows = sw.generate(image, sw.DimOrder.HeightWidthChannel, 300.05)
    return (windows)
Beispiel #5
0
    x_min_data, y_min_data, x_max_data, y_max_data = dataset.bounds
    poly_raster_bounds = Polygon([(x_min_data, y_min_data),
                                  (x_min_data, y_max_data),
                                  (x_max_data, y_max_data),
                                  (x_max_data, y_min_data)])

    # get raster metadata
    x_pix_size_m = dataset.meta['transform'][0]
    y_pix_size_m = dataset.meta['transform'][4]

    x_raster_size_pix = dataset.meta['width']
    y_raster_size_pix = dataset.meta['height']

    # Generate the set of windows
    windows = sw.generate(np.rot90(np.fliplr(dataset.read().T)),
                          sw.DimOrder.HeightWidthChannel, CHUNK_SIZE_PIX,
                          OVERLAP_FRAC)

    for i in tqdm(range(len(windows)),
                  desc='Chopping tif file : ',
                  leave=False,
                  file=sys.stdout):

        # convert chunk coordinates to bbox
        x_min = (windows[i].x * x_pix_size_m) + x_min_data
        x_max = ((windows[i].x + windows[i].w) * x_pix_size_m) + x_min_data
        y_min = (windows[i].y * abs(y_pix_size_m)) + y_min_data
        y_max = (
            (windows[i].y + windows[i].h) * abs(y_pix_size_m)) + y_min_data

        x_min_data, y_min_data, x_max_data, y_max_data = dataset.bounds
Beispiel #6
0
def compute_windows(numpy_image,pixels=400,overlap=0.05):
    windows = sw.generate(numpy_image, sw.DimOrder.HeightWidthChannel, pixels,overlap )
    return(windows)
Beispiel #7
0
    
    img = np.array(scipy.ndimage.imread(str(path)))

    windows = sw.generate(img, sw.DimOrder.HeightWidthChannel, 128, 0)

    for i, window in enumerate(windows):
        subset = img[ window.indices() ]
        filename = str(os.path.basename(path))[:str(os.path.basename(path)).find(".")]
        subset = skimage.img_as_int(subset)
        skimage.io.imsave('C:\\Users\\rohit\\Workspace\\Python\\MODIS\\Red_128\\' + filename + '_' + str(i) + '.tif', subset) """



#directory = os.getcwd() + '\\MOD09GA_NIR\\'
directory = os.getcwd() + '\\M31\\'
pathlist = Path(directory).iterdir()

#print(directory)

for path in pathlist:

    print(path)
    
    img = np.array(scipy.ndimage.imread(str(path)))

    windows = sw.generate(img, sw.DimOrder.HeightWidthChannel, 256, 0.3)

    for i, window in enumerate(windows):
        subset = img[ window.indices() ]
        filename = str(os.path.basename(path))[:str(os.path.basename(path)).find(".")]
        skimage.io.imsave(os.getcwd() + '\\M31_256\\' + filename + '_' + str(i) + '.png', subset) 
Beispiel #8
0
def remove_dark(x):
    windows = sw.generate(x, sw.DimOrder.HeightWidthChannel, 250, 0,
                          [remove_dark_single])
    for window in windows:
        x[window.indices()] = window.apply(x)
    return x
c_img = adjust_contrast(c_img).copy()
plt.imshow(c_img)
plt.savefig('trn_col.png')
plt.close()

##################
# Sliding Window #
##################

import slidingwindow as sw

x_val, y_val = np.load('./kaggle/x_tmp_%d.npy' % N_Cls), np.load(
    './kaggle/y_tmp_%d.npy' % N_Cls)
data = y_val[0]
data = np.rollaxis(data, 0, 3)
windows = sw.generate(data, sw.DimOrder.HeightWidthChannel, 16, 0)

window_dict = {}
wind = 1

for window in windows:
    subset = data[window.indices()]
    window_dict[wind] = {}
    for c in range(10):
        class_ = subset[:, :, c].sum()
        #print('The presence of class ' + str(c + 1) + ' is: ' + str((class_ / (160*160))*100) + '%')
        window_dict[wind][c] = class_

    wind += 1

np.save('./kaggle/dict_windows', window_dict)
Beispiel #10
0
import slidingwindow as sw
import numpy as np
import cv2
import FeatureExtractor

frame = cv2.imread("ts.jpg")

windows = sw.generate(frame, sw.DimOrder.HeightWidthChannel, 256, 0.5)

#print(windows)
count = 0
print(len(windows))
for window in windows:
    f = window.apply(frame)
    #print(np.shape(f))
    #print(np.shape(f))
    #print(window)
    print(count)
    print(np.shape(f))
    count = count + 1
'''
for window in windows:
    bbox = window.getRect()
    p1 = (int(bbox[0]), int(bbox[1]))
    p2 = (int(bbox[0] + bbox[2]), int(bbox[1] + bbox[3]))
    cv2.rectangle(frame, p1, p2, (0,0,255), 2, 1)

while True:
    cv2.imshow("image",frame)
    cv2.waitKey(1)'''