问题: 我有一个包含多个对象的二进制图像。我需要找到一种方法在这些不规则物体中放置尽可能大的 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 处停止。成本也不变。我尝试了不同的求解器,并优化了最小化。参数不会改变。
理想情况下,我希望每个区域都有一个矩形。每个区域(二进制对象)以不同颜色编码
如果优化是解决这些问题的好方法,也请发表评论。