Пример #1
0
    def test_warpcraters(self):

        # Not the real image dimensions, but whatever
        imgdim = [250, 300]

        ilong = self.craters["Long"].as_matrix()
        ilat = self.craters["Lat"].as_matrix()
        res = self.oproj.transform_points(x=ilong,
                                          y=ilat,
                                          src_crs=self.geoproj)[:, :2]

        # Get output
        x, y = mkin.coord2pix(res[:, 0],
                              res[:, 1],
                              self.oextent,
                              imgdim,
                              origin="upper")

        ctr_sub = mkin.WarpCraterLoc(self.craters,
                                     self.geoproj,
                                     self.oproj,
                                     self.oextent,
                                     imgdim,
                                     llbd=None,
                                     origin="upper")

        xy_gt = np.r_[x, y]
        xy = np.r_[ctr_sub["x"].as_matrix(), ctr_sub["y"].as_matrix()]

        self.assertTrue(np.all(np.isclose(xy, xy_gt, rtol=1e-7, atol=1e-10)))
Пример #2
0
    def test_pctoortho(self):

        imgo, imgwshp, offset = mkin.WarpImagePad(self.img,
                                                  self.iproj,
                                                  self.iextent,
                                                  self.oproj,
                                                  self.oextent,
                                                  origin="upper",
                                                  rgcoeff=1.2,
                                                  fillbg="black")

        ctr_xy = mkin.WarpCraterLoc(self.craters,
                                    self.geoproj,
                                    self.oproj,
                                    self.oextent,
                                    imgwshp,
                                    llbd=None,
                                    origin="upper")

        ctr_xy.loc[:, "x"] += offset[0]
        ctr_xy.loc[:, "y"] += offset[1]

        Cd = 1.
        pxperkm = mkin.km2pix(imgo.size[1], self.llbd[3] - self.llbd[2], \
                            dc=Cd, a=1737.4)
        ctr_xy["Diameter (pix)"] = ctr_xy["Diameter (km)"] * pxperkm

        imgo2, ctr_xy2 = mkin.PlateCarree_to_Orthographic(self.img,
                                                          None,
                                                          self.llbd,
                                                          self.craters,
                                                          iglobe=self.iglobe,
                                                          ctr_sub=True,
                                                          origin="upper",
                                                          rgcoeff=1.2,
                                                          dontsave=True,
                                                          slivercut=0.)

        imgo = np.asanyarray(imgo)
        imgo2 = np.asanyarray(imgo2)

        self.assertTrue(
            np.all(
                np.isclose(imgo.ravel(), imgo2.ravel(), rtol=1e-6,
                           atol=1e-10)))
        self.assertTrue(ctr_xy.equals(ctr_xy2))
Пример #3
0
def MakePCOTransform(img, oname, llbd, csvname):
    """Almost identical to make_input_data.PlateCarree_to_Orthographic,
    except designed to test relevant loading times when creating large
    datasets.
    """

    origin = "upper"
    rgcoeff = 1.2
    ctr_sub = True
    iglobe = ccrs.Globe(semimajor_axis=1737400,
                        semiminor_axis=1737400,
                        ellipse=None)

    craters = pd.read_csv(csvname,
                          sep=',',
                          header=0,
                          engine="c",
                          encoding="ISO-8859-1")

    # Set up Geodetic (long/lat), Plate Carree (usually long/lat, but
    # not when globe != WGS84) and Orthographic projections
    geoproj = ccrs.Geodetic(globe=iglobe)
    iproj = ccrs.PlateCarree(globe=iglobe)
    oproj = ccrs.Orthographic(central_longitude=np.mean(llbd[:2]),
                              central_latitude=np.mean(llbd[2:]),
                              globe=iglobe)

    # Create and transform coordinates of image corners and
    # edge midpoints.  Due to Plate Carree and Orthographic's symmetries,
    # max/min x/y values of these 9 points represent extrema
    # of the transformed image.
    xll = np.array([llbd[0], np.mean(llbd[:2]), llbd[1]])
    yll = np.array([llbd[2], np.mean(llbd[2:]), llbd[3]])
    xll, yll = np.meshgrid(xll, yll)
    xll = xll.ravel()
    yll = yll.ravel()

    # [:,:2] becaus we don't need elevation data
    res = iproj.transform_points(x=xll, y=yll, src_crs=geoproj)[:, :2]
    iextent = [min(res[:, 0]), max(res[:, 0]), min(res[:, 1]), max(res[:, 1])]

    res = oproj.transform_points(x=xll, y=yll, src_crs=geoproj)[:, :2]
    oextent = [min(res[:, 0]), max(res[:, 0]), min(res[:, 1]), max(res[:, 1])]

    imgo, imgwshp, offset = mkin.WarpImagePad(img,
                                              iproj,
                                              iextent,
                                              oproj,
                                              oextent,
                                              origin=origin,
                                              rgcoeff=rgcoeff,
                                              fillbg="white")

    # Convert crater x, y position
    if ctr_sub:
        llbd_in = None
    else:
        llbd_in = llbd
    ctr_xy = mkin.WarpCraterLoc(craters,
                                geoproj,
                                oproj,
                                oextent,
                                img.size,
                                llbd=llbd_in)
    # Shift crater x, y positions by offset
    # (origin doesn't matter for y-shift, since
    # padding is symmetric)
    ctr_xy.loc[:, "x"] += offset[0]
    ctr_xy.loc[:, "y"] += offset[1]

    imgo.save(oname)
    ctr_xy.to_csv(oname.split(".png")[0] + ".csv", index=False)