通过优化

时间:2016-10-20 12:12:48

标签: python image-processing scipy convex-optimization scikit-image

问题: 我有一个二进制图像,有多个对象。我需要找到一种方法来适应这些不规则物体中最大的方形。 见下面的图片

我尝试使用每个标记对象的边界框作为初始猜测和成本函数将此公式表示为优化问题,如下所示。边界框行被假定为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。参数不会改变。

理想情况下,我希望每个区域都有一个矩形。每个区域(二进制对象)以不同颜色Labelled Image

进行颜色编码

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

请求的带注释的图像发布在下面。几个对象上的矩形(假设编辑后的正方形)是黑色的(抱歉颜色选择不好)Annotated Image

0 个答案:

没有答案