问题: 我有一个二进制图像,有多个对象。我需要找到一种方法来适应这些不规则物体中最大的方形。 见下面的图片
我尝试使用每个标记对象的边界框作为初始猜测和成本函数将此公式表示为优化问题,如下所示。边界框行被假定为colums的初始猜测,因为它是一个正方形。
使用与Stefan关于stackoverflow的答案相同的方法:fitting a circle to a binary image 对于我的参数,我无法弄清楚如何针对这个简单的成本函数优化参数
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停止。成本也不会改变。 我尝试过不同的求解器,并优化.minimize。参数不会改变。
理想情况下,我希望每个区域都有一个矩形。每个区域(二进制对象)以不同颜色
进行颜色编码如果优化是解决这些问题的好方法,请评论。