Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package de.htw.cbir.feature;
- import java.awt.Graphics2D;
- import java.awt.image.BufferedImage;
- import de.htw.cbir.model.Pic;
- import de.htw.cbir.model.Settings;
- public class ColorMeanSaturation extends FeatureFactory
- {
- public ColorMeanSaturation(Settings settings) {
- super(settings);
- }
- ///////////////////////////////////////////
- // visualize the feature data as image
- //
- @Override
- public BufferedImage getFeatureImage(Pic image) {
- int w = 1;
- int h = 1;
- BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
- Graphics2D big = bi.createGraphics();
- int[] pixels = new int[h * w];
- float[] featureVector = image.getFeatureVector();
- int lum = (int) featureVector[0];
- int a = (int) featureVector[1];
- int b = (int) featureVector[2];
- int re = (int) (lum - b);
- int bl = (int) (lum - a);
- if(re < 0)
- re = 0;
- if (re > 255)
- re = 255;
- if(bl <0)
- bl = 0;
- if(bl > 255)
- bl = 255;
- int gr = (int) (3* lum - re - bl);
- System.out.println("Red: "+re);
- System.out.println("Blue: "+bl);
- System.out.println("Green: "+gr);
- if(gr < 0)
- gr += 256;
- if(re < 0)
- re += 256;
- if(bl < 0)
- bl += 256;
- pixels[0] = (0xFF << 24) | (re << 16) | (gr << 8) | bl;
- //Rücktransformation
- BufferedImage bThumb = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
- bThumb.setRGB(0, 0, w, h, pixels, 0, w);
- big.drawImage(bThumb, 0, 0, w, h, null);
- big.dispose();
- return bi;
- }
- @Override
- public float[] getFeatureVector(Pic image)
- {
- BufferedImage bi = image.getDisplayImage();
- int width = bi.getWidth();
- int height = bi.getHeight();
- int [] rgbValues = new int[width * height];
- bi.getRGB(0, 0, width, height, rgbValues, 0, width);
- // loop over the block
- int r = 0; int g = 0; int b = 0; int sum = 0;
- for(int y=0; y < height; y++) {
- for (int x=0 ; x<width ; x++) {
- int pos = y*width + x;
- r += (rgbValues[pos] >> 16) & 255;
- g += (rgbValues[pos] >> 8) & 255;
- b += (rgbValues[pos] ) & 255;
- sum++;
- }
- }
- r /= sum;
- g /= sum;
- b /= sum;
- float[] featureVector = new float[3];
- float lum = (r+g+b)/3;
- featureVector[0] = lum;
- featureVector[1] = settings.getSaturation()*(lum-b);
- featureVector[2] = settings.getSaturation()*(lum-r);
- return featureVector;
- }
- @Override
- public float getDistance(float[] fv1, float[] fv2) {
- return getL1Distance(fv1, fv2);
- }
- @Override
- public String getName() {
- return "ColorMeanSaturation (Saturation: " + settings.getSaturation() + ")";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement