【发布时间】:2018-07-05 12:18:26
【问题描述】:
我的工作需要在图像上应用本地二元运算符。为此,我已经将图像转换为灰色,然后还对图像进行了连接组件分析。
代码如下:
-
添加库
import numpy as np import pandas as pd import matplotlib.pyplot as plt from skimage.io import imread, imshow from skimage.color import rgb2gray from skimage.morphology import (erosion, dilation, closing, opening,area_closing, area_opening) from skimage.measure import label, regionprops, regionprops_table -
渲染图像
plt.figure(figsize=(6,6)) painting = imread("E:/Project/for_annotation/Gupi Gain0032.jpg") plt.imshow(painting); plt.figure(figsize=(6,6)) -
二值化图像
gray_painting = rgb2gray(painting) binarized = gray_painting<0.55 plt.imshow(binarized);
4.声明内核
square = np.array([[1,1,1],
[1,1,1],
[1,1,1]])
-
膨胀函数
def multi_dil(im, num, element=square): for i in range(num): im = dilation(im, element) return im -
侵蚀函数
def multi_ero(im, num, element=square): for i in range(num): im = erosion(im, element) return im -
应用的功能
plt.figure(figsize=(6,6)) multi_dilated = multi_dil(binarized, 7) area_closed = area_closing(multi_dilated, 50000) multi_eroded = multi_ero(area_closed, 7) opened = opening(multi_eroded) plt.imshow(opened); -
标签功能
plt.figure(figsize=(6,6)) label_im = label(opened) regions = regionprops(label_im) plt.imshow(label_im); -
提取特征
properties = ['area','convex_area','bbox_area', 'extent', 'mean_intensity','solidity', 'eccentricity', 'orientation'] pd.DataFrame(regionprops_table(label_im, gray_painting, properties=properties)) -
过滤区域
masks = [] bbox = [] list_of_index = [] for num, x in enumerate(regions): area = x.area convex_area = x.convex_area if (num!=0 and (area>100) and (convex_area/area <1.05) and (convex_area/area >0.95)): masks.append(regions[num].convex_image) bbox.append(regions[num].bbox) list_of_index.append(num) count = len(masks) -
提取图像
fig, ax = plt.subplots(2, int(count/2), figsize=(15,8)) for axis, box, mask in zip(ax.flatten(), bbox, masks): red = painting[:,:,0][box[0]:box[2], box[1]:box[3]] * mask green = painting[:,:,1][box[0]:box[2], box[1]:box[3]] * mask blue = painting[:,:,2][box[0]:box[2], box[1]:box[3]] * mask image = np.dstack([red,green,blue]) axis.imshow(image) plt.tight_layout() plt.figure(figsize=(6,6)) rgb_mask = np.zeros_like(label_im) for x in list_of_index: rgb_mask += (label_im==x+1).astype(int) red = painting[:,:,0] * rgb_mask green = painting[:,:,1] * rgb_mask blue = painting[:,:,2] * rgb_mask image = np.dstack([red,green,blue]) plt.imshow(image);
我收到一个错误。
ValueError: 列数必须是正整数,而不是 0
【问题讨论】:
-
如果有人能完成这项对我很有帮助的任务 - 我敢打赌
-
如果您遇到特定问题,我们可以提供帮助,但没有人会为您完成作业。
-
Img=cv2.imread("C://Users//USER//Pictures//Saved Pictures//fig2.tif",0) [M,N]=Img.shape[: 2] 连接=np.zeros((M,N)) 偏移量=[-1,M,1,-M] 索引=[]
-
for i in range(M): for j in range(N): if(Img(i,j)==1): No_of_Objects=N0_of_Objects+1 Index=[((j-1 )*M + i)] Connected(Index)=Mark while(Index!=0): Img(Index)=0 Neighbors=bsxfun(@plus,Index,Offsets) Neighbors = unique(Neighbors(:)) Index = Neighbors (find(Image(Neighbors))) Connected(Index)=Mark Mark=Mark+Difference
-
在python中我可以用什么代替@plus?
标签: python algorithm edit connected-components