def my4diffEdge(img, coarseImgs, labelMap): '''MY4 add different from Edge ''' img = sk.color.rgb2lab(img) # 获得4+4维 distance degreeVectors, Ws = getVectors(img, labelMap) weightSumVectors = getWeightSum(labelMap, degreeVectors, Ws) diffEdges, diffNeighbors = getAllDiffEdgeAndNeighbor(labelMap, Ws) vectors = np.append(weightSumVectors, diffEdges, 1) # vectors = np.append(vectors,diffNeighbors,1) vectorsTrains = [] coarseTrains = [] for coarseImg in coarseImgs: coarseTrain, vectorsTrainTag = getCoarseTrain(coarseImg, labelMap) vectorsTrains += list(vectors[vectorsTrainTag]) coarseTrains += list(coarseTrain) elm = getElm(np.array(vectorsTrains), np.array(coarseTrains)) refined = elm.predict(vectors)[:, 0] refinedImg = valueToLabelMap(labelMap, normalizing(refined)) mask = grabCut(sk.color.lab2rgb(img), refinedImg) refinedImg = normalizing(mask * refinedImg) return refinedImg
def precisionRecallCurve(imgGt, refinedImg, maxPoints=256): ''' maxPoints: 返回多少个点 手写求PR线 ''' _refinedImg = normalizing(refinedImg).ravel() _imgGt = imgGt.ravel() l = zip(_refinedImg, _imgGt) l.sort(key=lambda x: x[0]) n = len(_refinedImg) step = 1. / maxPoints P = imgGt.sum() _l = [0] * n summ = 0 for i in range(n): summ += l[-i - 1][1] _l[-i - 1] = summ index = 0 pl, rl = [], [] for i in range(maxPoints): thre = 0. + i * step for j in range(index, n): if l[j][0] >= thre: break index = j TP = float(_l[j]) _P = n - index p, r = TP / _P, TP / P pl += [p] rl += [r] pl = np.array(pl) rl = np.array(rl) return pl, rl, None
def mergeImgs(imgName, mergeMethods): ''' 生成合并图像 ''' if isinstance(imgName, int): imgName = IMG_NAME_LIST[imgName] print 'img index:%d/%d' % (IMG_NAME_LIST.index(imgName), len(IMG_NAME_LIST)) img = io.imread(IMG_DIR + imgName) / 255. imgGt = io.imread(IMG_DIR + imgName[:-3] + 'png') / 255. coarseDic = getCoarseDic(imgName, mergeMethods) sumCoarseImg = sum(coarseDic.values()) sumCoarseImg = sumCoarseImg / sumCoarseImg.max() mulImg = reduce(lambda x, y: x * y, coarseDic.values()) mulImg = normalizing(mulImg) integratImg = integratImgsBy3way(coarseDic.values()) coarsePath = COARSE_DIR + ('%s_ME1.png' % imgName[:imgName.rindex('.')]) io.imsave(coarsePath, sumCoarseImg) coarsePath = COARSE_DIR + ('%s_ME2.png' % imgName[:imgName.rindex('.')]) io.imsave(coarsePath, mulImg) coarsePath = COARSE_DIR + ('%s_ME3.png' % imgName[:imgName.rindex('.')]) io.imsave(coarsePath, integratImg) show([img, imgGt], lab=False) print 'mergeMethods: ', ' || '.join(mergeMethods) show(map(lambda k: coarseDic[k], mergeMethods)) print 'resoult: ', ' || '.join(['ME1', 'ME2', 'ME3']) show([sumCoarseImg, mulImg, integratImg])
def getRefindImgsOneElmAddLabAndLbp(img, coarseImgs, labelMap): '''MY3 use all coarse imgs to train one elm, than, predict one refinedImg add Lab ''' img = sk.color.rgb2lab(img) #show([mark_boundaries(img,labelMap),imgGt]) # 获得4+4维 distance degreeVectors, Ws = getVectors(img, labelMap) weightSumVectors = getWeightSum(labelMap, degreeVectors, Ws) '''add lab lbp''' labVectors = getColorVector(img, labelMap) lbpVectors = getLbp(img, labelMap) vectors = np.c_[weightSumVectors, labVectors, lbpVectors] # print 'weightSumVectors labVectors vectors.shape',weightSumVectors.shape,labVectors.shape,vectors.shape vectorsTrains = [] coarseTrains = [] for coarseImg in coarseImgs: coarseTrain, vectorsTrainTag = getCoarseTrain(coarseImg, labelMap) vectorsTrains += list(vectors[vectorsTrainTag]) coarseTrains += list(coarseTrain) elm = getElm(np.array(vectorsTrains), np.array(coarseTrains)) refined = elm.predict(vectors)[:, 0] refinedImg = valueToLabelMap(labelMap, normalizing(refined)) return refinedImg
def getBgNoElm(img, coarseImgs=None, labelMap=None): '''BG1 ''' img = sk.color.rgb2lab(img) #show([mark_boundaries(img,labelMap),imgGt]) # 获得4+4维 distance degreeVectors, Ws = getVectors(img, labelMap) vectors = getWeightSum(labelMap, degreeVectors, Ws) if not coarseImgs: bg = norma(vectors2labelMap(vectors, labelMap).sum(-1)) return bg show(bg) pblue('befor Classifier!') coarseImgs = [bg] vectorsTrains = [] coarseTrains = [] for coarseImg in coarseImgs: coarseTrain, vectorsTrainTag = getCoarseTrain(coarseImg, labelMap) vectorsTrains += list(vectors[vectorsTrainTag]) coarseTrains += list(coarseTrain) g() elm = getElm(np.array(vectorsTrains), np.array(coarseTrains)) refined = elm.predict(vectors)[:, 0] refinedImg = valueToLabelMap(labelMap, normalizing(refined)) return refinedImg
def showpr(imgName=1, methods=["MY4", "ME1", "MEAN", "DRFI", "QCUT", "DISC2"], lab=False): if isinstance(imgName, int): imgName = IMG_NAME_LIST[imgName] img = io.imread(IMG_DIR + imgName) / 255. imgGt = io.imread(IMG_DIR + imgName[:-3] + 'png') != 0 coarseDic = getCoarseDic(imgName, methods) imgs = [] methods = [] for k, coarseImg in coarseDic.items(): imgs += [mark_boundaries(normalizing(coarseImg), imgGt)] methods += [k] print '=' * 40 print IMG_NAME_LIST.index(imgName), imgName print 'methods:', ' || '.join(methods) show(imgs) show(mark_boundaries(img, imgGt)) from analysis import plotImgPr plotImgPr(imgGt, coarseDic)
def integratImgsBy3way(refinedImgs): def f(refinedImg): h, w = refinedImg.shape[:2] a, b, c, d = int(0.25 * h), int(0.75 * h), int(0.25 * w), int(0.75 * w) center = refinedImg[a:b, c:d].sum() ratio = float(center) / (refinedImg.sum() - center) m, n = refinedImg.shape distribut = 1. / mapp( lambda x, i, j: float(x) * ((i - m / 2)**2 + (j - n / 2)**2), refinedImg, True).sum() var = np.var(refinedImg) return ratio, distribut, var l = np.array(map(f, refinedImgs)) l = l / l.max(0) l = l.sum(1) mergeImg = sum(map(lambda x: x[0] * x[1], zip(refinedImgs, l))) mergeImg = normalizing(mergeImg) return mergeImg
def getRefindImgsOneElm(img, coarseImgs, labelMap): '''MY1 use all coarse imgs to train one elm, than, predict one refinedImg ''' img = sk.color.rgb2lab(img) #show([mark_boundaries(img,labelMap),imgGt]) # 获得4+4维 distance degreeVectors, Ws = getVectors(img, labelMap) vectors = getWeightSum(labelMap, degreeVectors, Ws) vectorsTrains = [] coarseTrains = [] for coarseImg in coarseImgs: coarseTrain, vectorsTrainTag = getCoarseTrain(coarseImg, labelMap) vectorsTrains += list(vectors[vectorsTrainTag]) coarseTrains += list(coarseTrain) elm = getElm(np.array(vectorsTrains), np.array(coarseTrains)) refined = elm.predict(vectors)[:, 0] refinedImg = valueToLabelMap(labelMap, normalizing(refined)) return refinedImg
def getRefindImgsManyElm(img, coarseImgs, labelMap): '''MY2 for each coarse img train a elm, each elm predict a refinedImg merge refinedImgs and normalizing to one refinedImg ''' img = sk.color.rgb2lab(img) #show([mark_boundaries(img,labelMap),imgGt]) # 获得4+4维 color and texture scatter degree degreeVectors, Ws = getVectors(img, labelMap) # vectors = getWeightSum(labelMap, degreeVectors, Ws) refinedImgs = [] for coarseImg in coarseImgs: coarseTrain, vectorsTrainTag = getCoarseTrain(coarseImg, labelMap) elm = getElm(vectors[vectorsTrainTag], coarseTrain) refined = elm.predict(vectors)[:, 0] refinedImg = valueToLabelMap(labelMap, normalizing(refined)) refinedImgs += [refinedImg] # 合并 归一 refinedImgSum = integratImgsBy3way(refinedImgs) return refinedImgSum