2025-05-25 14:30:24 +02:00
|
|
|
#include "image_background.h"
|
|
|
|
|
#include "common/geodetic/geodetic_coordinates.h"
|
|
|
|
|
#include "core/exception.h"
|
|
|
|
|
#include "image/meta.h"
|
|
|
|
|
#include "logger.h"
|
|
|
|
|
#include "projection/projection.h"
|
|
|
|
|
|
|
|
|
|
namespace satdump
|
|
|
|
|
{
|
|
|
|
|
namespace image
|
|
|
|
|
{
|
|
|
|
|
void remove_background(Image &img, float *progress)
|
|
|
|
|
{
|
|
|
|
|
size_t width = img.width();
|
|
|
|
|
size_t height = img.height();
|
|
|
|
|
|
|
|
|
|
nlohmann::json proj_cfg = image::get_metadata_proj_cfg(img);
|
|
|
|
|
proj_cfg["width"] = width;
|
|
|
|
|
proj_cfg["height"] = height;
|
2025-05-27 18:42:18 +01:00
|
|
|
projection::Projection p;
|
2025-05-25 14:30:24 +02:00
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
p = proj_cfg;
|
|
|
|
|
if (!p.init(0, 1))
|
|
|
|
|
throw satdump_exception("Error setting up proj!");
|
|
|
|
|
}
|
|
|
|
|
catch (std::exception &e)
|
|
|
|
|
{
|
|
|
|
|
logger->warn("Cannot remove background - Failed to setup projection : %s", e.what());
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
img.to_rgba();
|
|
|
|
|
geodetic::geodetic_coords_t dummy; // Hey! I resemble that remark!
|
|
|
|
|
|
|
|
|
|
for (size_t y = 0; y < height; y++)
|
|
|
|
|
{
|
|
|
|
|
for (size_t x = 0; x < width; x++)
|
|
|
|
|
if (p.inverse(x, y, dummy))
|
|
|
|
|
for (int c = 0; c < img.channels(); c++)
|
|
|
|
|
img.set(c, y * width + x, 0);
|
|
|
|
|
|
|
|
|
|
if (progress != nullptr)
|
|
|
|
|
*progress = (float)y / (float)height;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} // namespace image
|
|
|
|
|
} // namespace satdump
|