@Override public FeatureVector extract(MBFImage image, FImage mask) { ColourContrast cc = new ColourContrast(sigma, k, minSize); image.analyseWith(cc); return cc.getFeatureVector(); } }
@Override public void analyseImage(MBFImage image) { final List<ConnectedComponent> ccs = segmenter.segment(image); final MBFImage labImage = ColourSpace.convert(image, ColourSpace.CIE_Lab); final float[][] avgs = new float[ccs.size()][3]; final int w = image.getWidth(); final int h = image.getHeight(); // calculate patch average colours for (int i = 0; i < avgs.length; i++) { for (final Pixel p : ccs.get(i).pixels) { final Float[] v = labImage.getPixel(p); avgs[i][0] += v[0]; avgs[i][0] += v[1]; avgs[i][0] += v[2]; } final int sz = ccs.get(i).pixels.size(); avgs[i][0] /= sz; avgs[i][1] /= sz; avgs[i][2] /= sz; } for (int i = 0; i < avgs.length; i++) { for (int j = i + 1; j < avgs.length; j++) { final PixelSet ci = ccs.get(i); final PixelSet cj = ccs.get(i); final float C = CIEDE2000.calculateDeltaE(avgs[i], avgs[j]); contrast += (1 - distance(ci, cj, w, h)) * (C / (ci.calculateArea() * cj.calculateArea())); } } }
@Override public void analyseImage(MBFImage image) { final List<ConnectedComponent> ccs = segmenter.segment(image); final MBFImage labImage = ColourSpace.convert(image, ColourSpace.CIE_Lab); final float[][] avgs = new float[ccs.size()][3]; final int w = image.getWidth(); final int h = image.getHeight(); // calculate patch average colours for (int i = 0; i < avgs.length; i++) { for (final Pixel p : ccs.get(i).pixels) { final Float[] v = labImage.getPixel(p); avgs[i][0] += v[0]; avgs[i][0] += v[1]; avgs[i][0] += v[2]; } final int sz = ccs.get(i).pixels.size(); avgs[i][0] /= sz; avgs[i][1] /= sz; avgs[i][2] /= sz; } for (int i = 0; i < avgs.length; i++) { for (int j = i + 1; j < avgs.length; j++) { final PixelSet ci = ccs.get(i); final PixelSet cj = ccs.get(i); final float C = CIEDE2000.calculateDeltaE(avgs[i], avgs[j]); contrast += (1 - distance(ci, cj, w, h)) * (C / (ci.calculateArea() * cj.calculateArea())); } } }
@Override public FeatureVector extract(MBFImage image, FImage mask) { ColourContrast cc = new ColourContrast(sigma, k, minSize); image.analyseWith(cc); return cc.getFeatureVector(); } }