0

问题: 我有一个包含多个对象的二进制图像。我需要找到一种方法在这些不规则物体中放置尽可能大的 Square。见下图

我试图将其表述为一个优化问题,使用每个标记对象的边界框作为初始猜测和成本函数,如下所示。边界框行也被假定为列的初始猜测,因为它是一个正方形。

使用与 Stefan 在 stackoverflow 上的回答相同的方法:将圆拟合到二进制图像 对于我的参数,我无法弄清楚如何针对这个简单的成本函数优化参数

import scipy.optimize as optimize
import numpy as np
import skimage.draw as draw
import skimage.measure as measure

def cost(params):
   baser,basec,deltar = params
   ycords = range(int(baser),int(baser + deltar))
   xcords = range(int(basec),int(basec + deltar))
   coords = draw.polygon(ycords,xcords,shape=region.image.shape)    
   template = np.zeros_like(region.image)
   template[coords] = 1
return -np.sum(template == region.image)
labels , nlabels = measure.label(img,neighbors=4,return_num=True)
regions = measure.regionprops(labels.astype(int))

for region in regions:
   minr, minc, maxr, _ = region.bbox
   baser = minr
   basec = minc
   deltar = maxr-minr   # One parameter in case of square

   print "intial :", baser,basec,deltar
   OptimizeResult = optimize.fmin(cost,(baser,basec,deltar),disp=True)

    baser,basec,deltar = OptimizeResult 
    print "final : " , OptimizeResult
    # the above 2 are same. and so the results don't change

参数不变,优化在迭代 0 处停止。成本也不变。我尝试了不同的求解器,并优化了最小化。参数不会改变。

理想情况下,我希望每个区域都有一个矩形。每个区域(二进制对象)以不同颜色编码标记图像

如果优化是解决这些问题的好方法,也请发表评论。

要求的带注释的图像发布在下面。一些对象上的矩形(编辑后假定为正方形)为黑色(抱歉颜色选择不佳)注释图像

4

0 回答 0