本文整理汇总了C++中Star::Find方法的典型用法代码示例。如果您正苦于以下问题:C++ Star::Find方法的具体用法?C++ Star::Find怎么用?C++ Star::Find使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Star
的用法示例。
在下文中一共展示了Star::Find方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Median3
bool Star::AutoFind(const usImage& image, int extraEdgeAllowance, int searchRegion)
{
if (!image.Subframe.IsEmpty())
{
Debug.AddLine("Autofind called on subframe, returning error");
return false; // not found
}
wxBusyCursor busy;
Debug.AddLine(wxString::Format("Star::AutoFind called with edgeAllowance = %d searchRegion = %d", extraEdgeAllowance, searchRegion));
// run a 3x3 median first to eliminate hot pixels
usImage smoothed;
smoothed.CopyFrom(image);
Median3(smoothed);
// convert to floating point
FloatImg conv(smoothed);
// downsample the source image
const int downsample = 1;
if (downsample > 1)
{
FloatImg tmp;
Downsample(tmp, conv, downsample);
conv.Swap(tmp);
}
// run the PSF convolution
{
FloatImg tmp;
psf_conv(tmp, conv);
conv.Swap(tmp);
}
enum { CONV_RADIUS = 4 };
int dw = conv.Size.GetWidth(); // width of the downsampled image
int dh = conv.Size.GetHeight(); // height of the downsampled image
wxRect convRect(CONV_RADIUS, CONV_RADIUS, dw - 2 * CONV_RADIUS, dh - 2 * CONV_RADIUS); // region containing valid data
SaveImage(conv, "PHD2_AutoFind.fit");
enum { TOP_N = 100 }; // keep track of the brightest stars
std::set<Peak> stars; // sorted by ascending intensity
double global_mean, global_stdev;
GetStats(&global_mean, &global_stdev, conv, convRect);
Debug.AddLine("AutoFind: global mean = %.1f, stdev %.1f", global_mean, global_stdev);
const double threshold = 0.1;
Debug.AddLine("AutoFind: using threshold = %.1f", threshold);
// find each local maximum
int srch = 4;
for (int y = convRect.GetTop() + srch; y <= convRect.GetBottom() - srch; y++)
{
for (int x = convRect.GetLeft() + srch; x <= convRect.GetRight() - srch; x++)
{
float val = conv.px[dw * y + x];
bool ismax = false;
if (val > 0.0)
{
ismax = true;
for (int j = -srch; j <= srch; j++)
{
for (int i = -srch; i <= srch; i++)
{
if (i == 0 && j == 0)
continue;
if (conv.px[dw * (y + j) + (x + i)] > val)
{
ismax = false;
break;
}
}
}
}
if (!ismax)
continue;
// compare local maximum to mean value of surrounding pixels
const int local = 7;
double local_mean, local_stdev;
wxRect localRect(x - local, y - local, 2 * local + 1, 2 * local + 1);
localRect.Intersect(convRect);
GetStats(&local_mean, &local_stdev, conv, localRect);
// this is our measure of star intensity
double h = (val - local_mean) / global_stdev;
if (h < threshold)
{
// Debug.AddLine(wxString::Format("AG: local max REJECT [%d, %d] PSF %.1f SNR %.1f", imgx, imgy, val, SNR));
continue;
}
// coordinates on the original image
int imgx = x * downsample + downsample / 2;
//.........这里部分代码省略.........
示例2: Median3
bool Star::AutoFind(const usImage& image, int extraEdgeAllowance, int searchRegion)
{
if (!image.Subframe.IsEmpty())
{
Debug.AddLine("Autofind called on subframe, returning error");
return false; // not found
}
wxBusyCursor busy;
Debug.Write(wxString::Format("Star::AutoFind called with edgeAllowance = %d searchRegion = %d\n", extraEdgeAllowance, searchRegion));
// run a 3x3 median first to eliminate hot pixels
usImage smoothed;
smoothed.CopyFrom(image);
Median3(smoothed);
// convert to floating point
FloatImg conv(smoothed);
// downsample the source image
const int downsample = 1;
if (downsample > 1)
{
FloatImg tmp;
Downsample(tmp, conv, downsample);
conv.Swap(tmp);
}
// run the PSF convolution
{
FloatImg tmp;
psf_conv(tmp, conv);
conv.Swap(tmp);
}
enum { CONV_RADIUS = 4 };
int dw = conv.Size.GetWidth(); // width of the downsampled image
int dh = conv.Size.GetHeight(); // height of the downsampled image
wxRect convRect(CONV_RADIUS, CONV_RADIUS, dw - 2 * CONV_RADIUS, dh - 2 * CONV_RADIUS); // region containing valid data
SaveImage(conv, "PHD2_AutoFind.fit");
enum { TOP_N = 100 }; // keep track of the brightest stars
std::set<Peak> stars; // sorted by ascending intensity
double global_mean, global_stdev;
GetStats(&global_mean, &global_stdev, conv, convRect);
Debug.Write(wxString::Format("AutoFind: global mean = %.1f, stdev %.1f\n", global_mean, global_stdev));
const double threshold = 0.1;
Debug.Write(wxString::Format("AutoFind: using threshold = %.1f\n", threshold));
// find each local maximum
int srch = 4;
for (int y = convRect.GetTop() + srch; y <= convRect.GetBottom() - srch; y++)
{
for (int x = convRect.GetLeft() + srch; x <= convRect.GetRight() - srch; x++)
{
float val = conv.px[dw * y + x];
bool ismax = false;
if (val > 0.0)
{
ismax = true;
for (int j = -srch; j <= srch; j++)
{
for (int i = -srch; i <= srch; i++)
{
if (i == 0 && j == 0)
continue;
if (conv.px[dw * (y + j) + (x + i)] > val)
{
ismax = false;
break;
}
}
}
}
if (!ismax)
continue;
// compare local maximum to mean value of surrounding pixels
const int local = 7;
double local_mean, local_stdev;
wxRect localRect(x - local, y - local, 2 * local + 1, 2 * local + 1);
localRect.Intersect(convRect);
GetStats(&local_mean, &local_stdev, conv, localRect);
// this is our measure of star intensity
double h = (val - local_mean) / global_stdev;
if (h < threshold)
{
// Debug.Write(wxString::Format("AG: local max REJECT [%d, %d] PSF %.1f SNR %.1f\n", imgx, imgy, val, SNR));
continue;
}
// coordinates on the original image
int imgx = x * downsample + downsample / 2;
//.........这里部分代码省略.........