Skip to content

Commit

Permalink
Comparison updates
Browse files Browse the repository at this point in the history
  • Loading branch information
Egor-eth committed May 14, 2024
1 parent 815fddc commit a32dde0
Show file tree
Hide file tree
Showing 9 changed files with 247 additions and 52 deletions.
3 changes: 3 additions & 0 deletions include/spectral/internal/common/constants.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#ifndef INCLUDE_SPECTRAL_INTERNAL_COMMON_CONSTANTS_H
#define INCLUDE_SPECTRAL_INTERNAL_COMMON_CONSTANTS_H
#include <spectral/internal/math/math.h>
#include <vector>
#include <string>
#include <cinttypes>

Expand Down Expand Up @@ -29,6 +30,8 @@ namespace spec {
constexpr int WAVELENGHTS_END = 830;
constexpr int WAVELENGHTS_STEP = 1;

extern const std::vector<Float> WAVELENGHTS;

alignas(64) constexpr Float X_CURVE[] = {
// CIE X function values
0.0001299000f, 0.0001458470f, 0.0001638021f, 0.0001840037f, 0.0002066902f,
Expand Down
6 changes: 4 additions & 2 deletions include/spectral/spec/metrics.h
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
#ifndef INCLUDE_SPECTRAL_SPEC_METRICS_H
#define INCLUDE_SPECTRAL_SPEC_METRICS_H
#include <spectral/internal/math/math.h>
#include <spectral/internal/common/constants.h>
#include <spectral/spec/spectrum.h>
#include <spectral/imageutil/image.h>


namespace spec::metrics {

Float cie_delta_e(const vec3 &y1, const vec3 &y2);

Float mae(const ISpectrum &y1, const ISpectrum &y2);
Float sam(const ISpectrum &y1, const ISpectrum &y2);
Float mae(const ISpectrum &y1, const ISpectrum &y2, const std::vector<Float> &lambdas = WAVELENGHTS);
Float sam(const ISpectrum &y1, const ISpectrum &y2, const std::vector<Float> &lambdas = WAVELENGHTS);

Float mse(const Image &y1, const Image &y2);
Float psnr(const Image &y1, const Image &y2);
Expand Down
56 changes: 56 additions & 0 deletions lib/spectral/internal/common/constants.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#include <internal/common/constants.h>

namespace spec {

const std::vector<Float> WAVELENGHTS {
360,361,362,363,364,365,366,367,368,369,
370,371,372,373,374,375,376,377,378,379,
380,381,382,383,384,385,386,387,388,389,
390,391,392,393,394,395,396,397,398,399,
400,401,402,403,404,405,406,407,408,409,
410,411,412,413,414,415,416,417,418,419,
420,421,422,423,424,425,426,427,428,429,
430,431,432,433,434,435,436,437,438,439,
440,441,442,443,444,445,446,447,448,449,
450,451,452,453,454,455,456,457,458,459,
460,461,462,463,464,465,466,467,468,469,
470,471,472,473,474,475,476,477,478,479,
480,481,482,483,484,485,486,487,488,489,
490,491,492,493,494,495,496,497,498,499,
500,501,502,503,504,505,506,507,508,509,
510,511,512,513,514,515,516,517,518,519,
520,521,522,523,524,525,526,527,528,529,
530,531,532,533,534,535,536,537,538,539,
540,541,542,543,544,545,546,547,548,549,
550,551,552,553,554,555,556,557,558,559,
560,561,562,563,564,565,566,567,568,569,
570,571,572,573,574,575,576,577,578,579,
580,581,582,583,584,585,586,587,588,589,
590,591,592,593,594,595,596,597,598,599,
600,601,602,603,604,605,606,607,608,609,
610,611,612,613,614,615,616,617,618,619,
620,621,622,623,624,625,626,627,628,629,
630,631,632,633,634,635,636,637,638,639,
640,641,642,643,644,645,646,647,648,649,
650,651,652,653,654,655,656,657,658,659,
660,661,662,663,664,665,666,667,668,669,
670,671,672,673,674,675,676,677,678,679,
680,681,682,683,684,685,686,687,688,689,
690,691,692,693,694,695,696,697,698,699,
700,701,702,703,704,705,706,707,708,709,
710,711,712,713,714,715,716,717,718,719,
720,721,722,723,724,725,726,727,728,729,
730,731,732,733,734,735,736,737,738,739,
740,741,742,743,744,745,746,747,748,749,
750,751,752,753,754,755,756,757,758,759,
760,761,762,763,764,765,766,767,768,769,
770,771,772,773,774,775,776,777,778,779,
780,781,782,783,784,785,786,787,788,789,
790,791,792,793,794,795,796,797,798,799,
800,801,802,803,804,805,806,807,808,809,
810,811,812,813,814,815,816,817,818,819,
820,821,822,823,824,825,826,827,828,829,
830
};

}
1 change: 1 addition & 0 deletions lib/spectral/internal/common/properties.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ set(MODULE_PATH ${SRC}/spectral/common)
set(MODULE_SOURCES
util.cpp
refl.cpp
constants.cpp
)

set(MODULE_LIBS
Expand Down
10 changes: 5 additions & 5 deletions lib/spectral/spec/metrics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,21 @@ namespace spec::metrics {
}

//------SPECTRA------
Float mae(const ISpectrum &y1, const ISpectrum &y2)
Float mae(const ISpectrum &y1, const ISpectrum &y2, const std::vector<Float> &wavelenghts)
{
Float res = 0.0f;
for(int wl = WAVELENGHTS_START; wl <= WAVELENGHTS_END; wl += WAVELENGHTS_STEP) {
for(Float wl : wavelenghts) {
res += std::fabs(y1(wl) - y2(wl));
}
return res / Float((WAVELENGHTS_END - WAVELENGHTS_START) / WAVELENGHTS_STEP);
}

Float sam(const ISpectrum &y1, const ISpectrum &y2)
Float sam(const ISpectrum &y1, const ISpectrum &y2, const std::vector<Float> &wavelenghts)
{
Float dist1 = 0.0f;
Float dist2 = 0.0f;
Float dot = 0.0f;
for(int wl = WAVELENGHTS_START; wl <= WAVELENGHTS_END; wl += WAVELENGHTS_STEP)
for(Float wl : wavelenghts)
{
const Float val1 = y1(wl);
dist1 += val1 * val1;
Expand All @@ -36,7 +36,7 @@ namespace spec::metrics {
}

if(dist1 == 0.0f || dist2 == 0.0f) {
for(int wl = WAVELENGHTS_START; wl <= WAVELENGHTS_END; wl += WAVELENGHTS_STEP)
for(Float wl : wavelenghts)
{
if(y1(wl) != y2(wl)) {
return math::PI / 2.0f;
Expand Down
2 changes: 1 addition & 1 deletion lib/spectral/spec/spectral_util_load.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ namespace spec::util
BasicSpectrum *ls = new BasicSpectrum();

for(int w = 0; w < meta.bands; ++w) {
ls->set(meta.wavelength[w], static_cast<Float>(meta.illuminant[w]));
ls->set(meta.wavelength[w], Float(meta.illuminant[w]));
}
lightsource.reset(ls);
return img;
Expand Down
Loading

0 comments on commit a32dde0

Please sign in to comment.