Проблема: у меня есть бинарное изображение с несколькими объектами. Мне нужно найти способ вписать в эти неправильные объекты максимально возможную площадь. см. изображение, прикрепленное ниже
Я попытался сформулировать это как проблему оптимизации, используя ограничивающую рамку каждого помеченного объекта в качестве начального предположения и функцию стоимости, как показано ниже. Строки ограничивающей рамки также считаются исходным предположением для столбцов, поскольку это квадрат.
Используя тот же подход, что и ответ Стефана в 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. Стоимость тоже не меняется. Я пробовал разные решатели и оптимизировал.минимизировать. параметры не меняются.
В идеале я хотел бы прямоугольник в каждом из регионов. каждая область (двоичный объект) имеет цветную кодировку
Также прокомментируйте, является ли оптимизация хорошим способом решения этих проблем.
Аннотированное изображение в соответствии с запросом размещено ниже. Прямоугольники (предположим, квадраты после редактирования) на нескольких объектах выделены ЧЕРНЫМ цветом (извините за плохой выбор цвета)