/testsrc/edu/nyu/cs/lcs/ImageProcessor.java

https://github.com/scotdalton/lcs-bak · Java · 96 lines · 74 code · 15 blank · 7 comment · 1 complexity · 5682cc719913fde5ef8bd6e31688d485 MD5 · raw file

  1. /**
  2. *
  3. */
  4. package edu.nyu.cs.lcs;
  5. import static com.googlecode.javacv.cpp.opencv_highgui.*;
  6. import static com.googlecode.javacv.cpp.opencv_core.*;
  7. import static com.googlecode.javacv.cpp.opencv_imgproc.*;
  8. import java.io.File;
  9. import com.googlecode.javacv.cpp.opencv_core.IplImage;
  10. import com.googlecode.javacv.cpp.opencv_imgproc.CvHistogram;
  11. /**
  12. * @author Scot Dalton
  13. *
  14. */
  15. public class ImageProcessor {
  16. private IplImage candidateImage;
  17. private IplImage grayScaleCandidateImage;
  18. private CvHistogram cvHistogram;
  19. private CvSize candidateSize;
  20. public ImageProcessor(File file) {
  21. this(file.getAbsolutePath());
  22. }
  23. public ImageProcessor(String filename) {
  24. candidateImage = cvLoadImage(filename);
  25. candidateSize = candidateImage.cvSize();
  26. grayScaleCandidateImage =
  27. cvLoadImage(filename, CV_LOAD_IMAGE_GRAYSCALE);
  28. IplImage[] channels = new IplImage[3];
  29. for(int i=0; i<3; i++)
  30. channels[i] = IplImage.create(candidateSize, IPL_DEPTH_8U, 1);
  31. cvSplit(candidateImage, channels[0] ,channels[1] ,channels[2] , null);
  32. int[] numBins = {256};
  33. float range[] = {0, 255};
  34. float[][] ranges = {range};
  35. cvHistogram = CvHistogram.create(1, numBins, CV_HIST_ARRAY, ranges, 1);
  36. cvCalcHist(channels, cvHistogram, 0, null);
  37. cvNormalizeHist(cvHistogram, 1.0);
  38. }
  39. public CvHistogram getHistorgram() {
  40. return cvHistogram;
  41. }
  42. public IplImage getHistorgramImage() {
  43. IplImage returnImage = drawHistogram();
  44. return returnImage;
  45. }
  46. public IplImage getEdgeImage() {
  47. return getCannyEdgeImage();
  48. }
  49. protected IplImage getCannyEdgeImage() {
  50. IplImage returnImage =
  51. IplImage.create(candidateSize,
  52. IPL_DEPTH_8U, grayScaleCandidateImage.nChannels());
  53. cvCanny(grayScaleCandidateImage, returnImage, 1, 2, 7);
  54. return returnImage;
  55. }
  56. protected IplImage getHarrisEdgeImage() {
  57. IplImage returnImage =
  58. IplImage.create(candidateSize,
  59. IPL_DEPTH_32F, grayScaleCandidateImage.nChannels());
  60. cvCornerHarris(grayScaleCandidateImage, returnImage, 1000, 7, 0.04);
  61. return returnImage;
  62. }
  63. protected IplImage getEigenEdgeImage() {
  64. IplImage returnImage =
  65. IplImage.create(candidateSize,
  66. IPL_DEPTH_32F, grayScaleCandidateImage.nChannels());
  67. cvCornerMinEigenVal(grayScaleCandidateImage, returnImage, 1000, 7);
  68. return returnImage;
  69. }
  70. public void toFile(String filename, IplImage image) {
  71. cvSaveImage(filename, image);
  72. }
  73. private IplImage drawHistogram() {
  74. return drawHistogram(1, 1);
  75. }
  76. private IplImage drawHistogram(int scaleX, int scaleY) {
  77. IplImage returnImage =
  78. IplImage.create(cvSize(256*scaleX, 64*scaleY), 8 ,1);
  79. return returnImage;
  80. }
  81. }