Created RGB to monochrome filters.

This commit is contained in:
nissim.hadar 2017-11-20 08:11:19 -08:00
parent b13ccab303
commit 689957c80b
4 changed files with 37 additions and 23 deletions

View file

@ -12,26 +12,28 @@
#include <itkRGBPixel.h> #include <itkRGBPixel.h>
#include <itkImage.h> #include <itkImage.h>
#include <itkImageFileReader.h> #include <itkRGBToLuminanceImageFilter.h>
#include <itkImageFileWriter.h>
float ITKImageComparer::compareImages(QString file1, QString file2) const { ITKImageComparer::ITKImageComparer() {
using PixelType = itk::RGBPixel<unsigned char>; // These are smart pointers that do not need to be deleted
using ImageType = itk::Image<PixelType, 2>; actualImageReader = ReaderType::New();
expectedImageReader = ReaderType::New();
}
using ReaderType = itk::ImageFileReader<ImageType>; float ITKImageComparer::compareImages(QString actualImageFilename, QString expectedImageFilename) const {
using WriterType = itk::ImageFileWriter<ImageType>; actualImageReader->SetFileName(actualImageFilename.toStdString().c_str());
expectedImageReader->SetFileName(expectedImageFilename.toStdString().c_str());
ReaderType::Pointer reader = ReaderType::New(); // Images are converted to monochrome for comparison
WriterType::Pointer writer = WriterType::New(); using MonochromePixelType = unsigned char;
using MonochromeImageType = itk::Image<MonochromePixelType, Dimension>;
reader->SetFileName(file1.toStdString().c_str()); using FilterType = itk::RGBToLuminanceImageFilter<RGBImageType, MonochromeImageType>;
writer->SetFileName("D:/pics/loni.jpg");
FilterType::Pointer actualImageToMonochrome = FilterType::New();
ImageType::Pointer image = reader->GetOutput(); FilterType::Pointer expectedImageToMonochrome = FilterType::New();
writer->SetInput(image);
writer->Update();
actualImageToMonochrome->SetInput(actualImageReader->GetOutput());
expectedImageToMonochrome->SetInput(expectedImageReader->GetOutput());
return 0.0; return 0.0;
} }

View file

@ -12,11 +12,23 @@
#include "ImageComparer.h" #include "ImageComparer.h"
#include <itkImage.h> #include <itkImageFileReader.h>
class ITKImageComparer : public ImageComparer { class ITKImageComparer : public ImageComparer {
public: public:
float compareImages(QString file1, QString file2) const final; ITKImageComparer();
float compareImages(QString actualImageFilename, QString expectedImageFilename) const final;
private:
static const unsigned int Dimension{ 2 };
using RGBPixelType = itk::RGBPixel<unsigned char>;
using RGBImageType = itk::Image<RGBPixelType, Dimension>;
using ReaderType = itk::ImageFileReader<RGBImageType>;
ReaderType::Pointer actualImageReader;
ReaderType::Pointer expectedImageReader;
}; };
#endif // hifi_ITKImageComparer_h #endif // hifi_ITKImageComparer_h

View file

@ -14,7 +14,7 @@
class ImageComparer { class ImageComparer {
public: public:
virtual float compareImages(QString file1, QString file2) const = 0; virtual float compareImages(QString actualImageFilename, QString expectedImageFilename) const = 0;
}; };
#endif // hifi_ImageComparer_h #endif // hifi_ImageComparer_h

View file

@ -57,10 +57,10 @@ void Test::evaluateTests() {
} }
// The number of images in each list should be identical // The number of images in each list should be identical
if (expectedImages.length() != resultImages.length()) { if (expectedImages.length() != actualImages.length()) {
messageBox.critical(0, messageBox.critical(0,
"Test failed", "Test failed",
"Found " + QString::number(resultImages.length()) + " images in directory" + "Found " + QString::number(actualImages.length()) + " images in directory" +
"\nExpected to find " + QString::number(expectedImages.length()) + " images"); "\nExpected to find " + QString::number(expectedImages.length()) + " images");
exit(-1); exit(-1);
@ -72,7 +72,7 @@ void Test::evaluateTests() {
bool success{ true }; bool success{ true };
bool keepOn{ true }; bool keepOn{ true };
for (int i = 0; keepOn && i < expectedImages.length(); ++i) { for (int i = 0; keepOn && i < expectedImages.length(); ++i) {
float error = itkImageComparer.compareImages(expectedImages[i], actualImages[i]); float error = itkImageComparer.compareImages(actualImages[i], expectedImages[i]);
if (error > THRESHOLD) { if (error > THRESHOLD) {
mismatchWindow.setTestFailure(TestFailure{ mismatchWindow.setTestFailure(TestFailure{
error, // value of the error (float) error, // value of the error (float)