需求:由于斑点图像二值化后,生成的二值化图像的斑点轮廓区域存在黑边或噪点,我要提取斑点区域中较亮部分的坐标值,用于精确拟合斑点的几何中心;
以下函数功能:
输入 多个斑点区域的坐标组构成的初始区域坐标
输出 每个斑点区域内部自适应较亮灰度区域的坐标值
from heapq import nlargest
def glob_lightestn(globs_area, image, n):
#globs_area是要提取的区域坐标,可以是多个,格式为list,如list = [[[1,2], [3,4]], [[5,6], [7,8]]]即为两片区域的坐标组;
#image是灰度图,要根据灰度提取像素坐标;
#n 是要提取灰度值最亮的百分之多少, 例:0.2, 0.3, 0.5(n<=1.0);
results = []
for i in range(len(globs_area)):
#获取前 n% 的灰度值
gray_group = []
for point in globs_area[i]:
#获取该点灰度值
gray = image[point[0]][point[1]]
if gray not in gray_group:
gray_group.append(gray)
n_50 = int(len(gray_group) * n)
gray_group2 = nlargest(n_50, gray_group)
#根据前 n% 的灰度值提取相应像素坐标
gray_new = []
for point in globs_area[i]:
if image[point[0]][point[1]] in gray_group2:
gray_new.append(point)
results.append(gray_new)
return results
输入图像:
输出:斑点区域对应的较亮部分的坐标值
输出的效果图展示: