我有一个650x650大小的二进制图像。我想创建50x50的补丁。这意味着我需要169个补丁。我想检查每个补丁中是否至少有一个“ ONE”元素。 我还需要结果是每个补丁都成对出现。
这里有一个2d的示例: 2d example
到目前为止很好。当我从skimage.util.shape实现view_as_blocks函数时,它返回(13,13,50,50)的列表。
我搜索“ Ones”的方式将是numpy.where,但是我迷失了尺寸... 这是我的代码:
def distinguish_patches_for_label(image_path):
im1=cv2.imread(image_path)
im2 = cv2.cvtColor(im1,cv2.COLOR_BGR2GRAY)
im3=(im2>100).astype(np.uint8)
im4 = cv2.resize(im3,(650,650))
patches=view_as_blocks(im4,block_shape=(50,50))
for i in range(patches.shape[0]):
for j in range(patches.shape[0]):
indexes_normal=list(zip(*np.where(patches[i,j,:,:]== 0)))
for i in range(patches.shape[0]):
for j in range(patches.shape[0]):
indexes_XDs=list(zip(*np.where(patches[i,:]== 1)))
list1=[]
list2=[]
for i in range(len(indexes_normal)):
list1.append(indexes_normal[i][0])
list2.append(indexes_normal[i][1])
zipped_indexes_normal=list(zip(list1,list2))
list3=[]
list4=[]
for i in range(len(indexes_XDs)):
list3.append(indexes_XDs[i][0])
list4.append(indexes_XDs[i][1])
zipped_indexes_XDs=list(zip(list3,list4))
return zipped_indexes_normal,zipped_indexes_XDs