python 单张图像分块

import os
from random import shuffle
import numpy as np


def image2patch(image, patch_size=(10, 10), step_size=None, mask_percent=0, random_mask=True):
    m, n = patch_size
    if len(image.shape) == 2:
        C = 1
        H, W = image.shape
        image = np.reshape(image, [H, W, 1])  
    elif len(image.shape) == 3:
        H, W, C = image.shape
    else:
        raise os.error

    if not step_size:
        step_h, step_w = patch_size
    else:
        step_h, step_w = step_size
    
    H_num = int((H-patch_size[0])/step_h)
    W_num = int((W-patch_size[1])/step_w)
    patch_num = H_num * W_num
    y_ = [step_h * i for i in range(H_num)]
    x_ = [step_w * i for i in range(W_num)]

    assert mask_percent >=0 and mask_percent <=1
    mask_num = [0 for i in range(int(mask_percent*patch_num))]
    patch_flag = mask_num + [1 for i in range(patch_num-len(mask_num))]

    if random_mask:
        shuffle(patch_flag)

    res = np.zeros([patch_num, m, n, C])
    index = 0

    for y in y_:
        for x in x_:
            patch = image[y:y+m, x:x+n, :]
            if patch.shape != (m, n, C):
                print('Warning, check size of patch.')
                res[index] = np.zeros([m, n, C])
            else:
                res[index] = patch*patch_flag[index]
            index = index + 1

    return H_num, W_num, res

测试

import matplotlib.pyplot as plt
from skimage import data, img_as_float
from skimage.transform import rescale, resize, downscale_local_mean

# img = img_as_float(data.camera()) # 灰色
img = img_as_float(data.astronaut()) # 彩色
print(img.shape)
# image_downscaled = downscale_local_mean(img, (4, 3))
m, n, im2col = image2patch(img, patch_size=(50, 50),
								step_size=(40, 60),
								 mask_percent=0.3, 
								 random_mask=True) 
print(im2col.shape)

plt.figure(figsize=(12,12))
plt.imshow(img)
plt.figure(figsize=(12,12))
for i in np.arange(m*n):
    plt.subplot(m, n, i+1)
    plt.imshow(im2col[i])
    plt.axis("off")
plt.subplots_adjust(wspace = 0.05,hspace = 0.05)  
plt.show()

效果
原图1
在这里插入图片描述
分块2在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值