/*
* Copyright (c) 2011-2016, Peter Abeles. All Rights Reserved.
*
* This file is part of BoofCV (http://boofcv.org).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package boofcv.demonstrations.feature.describe;
import boofcv.alg.feature.dense.DescribeDenseHogAlg;
import boofcv.factory.feature.dense.ConfigDenseHoG;
import boofcv.factory.feature.dense.FactoryDescribeImageDenseAlg;
import boofcv.gui.DemonstrationBase;
import boofcv.gui.image.ImagePanel;
import boofcv.gui.image.ShowImages;
import boofcv.io.UtilIO;
import boofcv.struct.image.GrayU8;
import boofcv.struct.image.ImageBase;
import boofcv.struct.image.ImageType;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* @author Peter Abeles
*/
// TODO add ability to control visualization options
// TODO change HOG cell size
// TODO render grid overlay
public class VisualizeImageHogApp extends DemonstrationBase {
DescribeDenseHogAlg hog;
VisualizeHogCells visualizers;
ImagePanel imagePanel = new ImagePanel();
BufferedImage work;
Object lock = new Object();
ControlHogPanel control = new ControlHogPanel(this);
boolean showInput = false;
public VisualizeImageHogApp(List exampleInputs, ImageType imageType) {
super(exampleInputs, imageType);
createHoG(imageType);
visualizers = new VisualizeHogCells(hog);
visualizers.setShowLog(control.doShowLog);
visualizers.setLocalMax(control.doShowLocal);
visualizers.setShowGrid(control.doShowGrid);
add(imagePanel,BorderLayout.CENTER);
add(control,BorderLayout.WEST);
imagePanel.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {
int row = e.getY()/hog.getWidthCell();
int col = e.getX()/hog.getWidthCell();
if( row >= 0 && col >= 0 && row < hog.getCellRows() && col < hog.getCellCols() ) {
DescribeDenseHogAlg.Cell c = hog.getCell(row,col);
System.out.print("Cell["+row+" , "+col+"] histogram =");
for (int i = 0; i < c.histogram.length; i++) {
System.out.print(" "+c.histogram[i]);
}
System.out.println();
}
}
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
});
}
private void createHoG(ImageType imageType) {
ConfigDenseHoG config = new ConfigDenseHoG();
config.widthCell = control.cellWidth;
config.orientationBins = control.histogram;
hog = FactoryDescribeImageDenseAlg.hog(config,imageType);
}
@Override
public void processImage(BufferedImage buffered, T input) {
synchronized (lock) {
hog.setInput(input);
hog.process();
work = visualizers.createOutputBuffered(work);
Graphics2D g2 = work.createGraphics();
g2.setColor(Color.BLACK);
g2.fillRect(0, 0, work.getWidth(), work.getHeight());
visualizers.render(g2);
if( showInput )
g2.drawImage(buffered,0,0,buffered.getWidth()/5,buffered.getHeight()/5,null);
}
imagePanel.setBufferedImage(work);
imagePanel.setPreferredSize(new Dimension(work.getWidth(),work.getHeight()));
imagePanel.setMinimumSize(new Dimension(work.getWidth(),work.getHeight()));
}
public void setCellWidth( int width ) {
synchronized (lock) {
hog.setWidthCell(width);
reprocessSingleImage();
}
}
public void setHistogram(int histogram) {
synchronized (lock) {
createHoG(imageType);
visualizers.setHoG(hog);
reprocessSingleImage();
}
}
public void setShowGrid(boolean showGrid) {
visualizers.showGrid = showGrid;
reprocessSingleImage();
}
public void setShowLocal(boolean show ) {
visualizers.localMax = show;
reprocessSingleImage();
}
public void setShowLog(boolean show ) {
visualizers.setShowLog(show);
reprocessSingleImage();
}
public void setShowInput( boolean show ) {
this.showInput = show;
reprocessSingleImage();
}
public static void main(String[] args) {
List examples = new ArrayList();
examples.add(UtilIO.pathExample("shapes/shapes01.png"));
examples.add(UtilIO.pathExample("shapes/shapes02.png"));
examples.add(UtilIO.pathExample("shapes/concave01.jpg"));
examples.add(UtilIO.pathExample("particles01.jpg"));
ImageType imageType = ImageType.single(GrayU8.class);
VisualizeImageHogApp app = new VisualizeImageHogApp(examples, imageType);
app.openFile(new File(examples.get(0)));
app.waitUntilDoneProcessing();
ShowImages.showWindow(app, "Hog Descriptor Cell Visualization",true);
}
}
Ads help maintain this website.