56 QString progressMsg,
double sampPercent) {
58 if (sampPercent <= 0.0 || sampPercent > 100.0) {
59 string msg =
"The sampling percent must be a decimal (0.0, 100.0]";
63 p_sampPercent = sampPercent;
71 QString msg =
"Number of bands do not match between cubes [" +
72 p_xFile.name() +
"] and [" + p_yFile.name() +
"]";
76 p_stats.resize(p_bands);
83 if (*projX != *projY) {
84 QString msg =
"Mapping groups do not match between cubes [" +
85 p_xFile.name() +
"] and [" + p_yFile.name() +
"]";
101 if ((Xmin1 < Xmax2) && (Xmax1 > Xmin2) && (Ymin1 < Ymax2) && (Ymax1 > Ymin2)) {
102 double minX = Xmin1 > Xmin2 ? Xmin1 : Xmin2;
103 double minY = Ymin1 > Ymin2 ? Ymin1 : Ymin2;
104 double maxX = Xmax1 < Xmax2 ? Xmax1 : Xmax2;
105 double maxY = Ymax1 < Ymax2 ? Ymax1 : Ymax2;
108 p_minSampX = (int)(projX->
ToWorldX(minX) + 0.5);
109 p_maxSampX = (int)(projX->
ToWorldX(maxX) + 0.5);
110 p_minSampY = (int)(projY->
ToWorldX(minX) + 0.5);
111 p_maxSampY = (int)(projY->
ToWorldX(maxX) + 0.5);
112 p_sampRange = p_maxSampX - p_minSampX + 1;
115 if (p_sampRange <= 0)
return;
118 p_minLineX = (int)(projX->
ToWorldY(maxY) + 0.5);
119 p_maxLineX = (int)(projX->
ToWorldY(minY) + 0.5);
120 p_minLineY = (int)(projY->
ToWorldY(maxY) + 0.5);
121 p_maxLineY = (int)(projY->
ToWorldY(minY) + 0.5);
122 p_lineRange = p_maxLineX - p_minLineX + 1;
128 int linc = (int)(100.0 / sampPercent + 0.5);
133 int maxSteps = (int)(p_lineRange / linc + 0.5);
135 if (p_lineRange % linc != 0) maxSteps += 1;
143 for (
int band = 1; band <= p_bands; band++) {
148 while(i < p_lineRange) {
150 b2.SetBasePosition(p_minSampY, (i + p_minLineY), band);
153 p_stats[band-1].AddData(b1.DoubleBuffer(), b2.DoubleBuffer(), p_sampRange);
156 if (i + linc > p_lineRange - 1 && i != p_lineRange - 1) {
175 bool OverlapStatistics::HasOverlap()
const {
176 for (
int b = 0; b < p_bands; b++) {
177 if (p_stats[b].ValidPixels() > 0)
return true;
195 for (
int band = 1; band <= Bands(); band++) {
196 if (HasOverlap(band)) {
198 stdX +=
toString(GetMStats(band).X().StandardDeviation());
199 varX +=
toString(GetMStats(band).X().Variance());
218 for (
int band = 1; band <= Bands(); band++) {
219 if (HasOverlap(band)) {
221 stdY +=
toString(GetMStats(band).Y().StandardDeviation());
222 varY +=
toString(GetMStats(band).Y().Variance());
248 for (
int band = 1; band <= Bands(); band++) {
249 if (HasOverlap(band)) {
250 QString validStr =
"false";
251 if (IsValid(band)) validStr =
"true";
253 cov +=
toString(GetMStats(band).Covariance());
254 cor +=
toString(GetMStats(band).Correlation());
255 val +=
toString(GetMStats(band).ValidPixels());
256 inv +=
toString(GetMStats(band).InvalidPixels());
257 tot +=
toString(GetMStats(band).TotalPixels());
267 for (
int band = 1; band <= Bands(); band++) {
268 if (HasOverlap(band)) {
269 QString bandStr =
"LinearRegression" +
toString(band);
273 GetMStats(band).LinearRegression(a, b);
288 QString msg =
"Trivial overlap between [" + FileNameX().
name();
289 msg +=
"] and [" + FileNameY().name() +
"]";