def test_reflectance(img):
    pan = panel.Panel(img)
    panel_reflectance = 0.5
    panel_irradiance = pan.irradiance_mean(panel_reflectance)
    reflectance_img = img.reflectance(panel_irradiance)
    ref_mean, _, _, _ = pan.region_stats(reflectance_img, pan.panel_corners())
    assert ref_mean == pytest.approx(panel_reflectance, 1e-4)
def test_radiance_panel(panel_image_name):
    img = image.Image(panel_image_name)
    pan = panel.Panel(img)
    mean, std, num, sat = pan.radiance()
    assert mean == pytest.approx(0.170284, rel=0.01)
    assert std == pytest.approx(0.0029387953691472554, rel=0.02)
    assert num == pytest.approx(12154, rel=0.02)
    assert sat == pytest.approx(0, abs=2)
Beispiel #3
0
def test_radiance_panel(panel_image_name):
    img = image.Image(panel_image_name)
    pan = panel.Panel(img)
    mean, std, num, sat = pan.radiance()
    assert mean == pytest.approx(0.170284, rel=0.01)
    assert std == pytest.approx(0.0033872969661854742, rel=0.02)
    assert num == pytest.approx(26005, rel=0.02)
    assert sat == pytest.approx(0, abs=2)
Beispiel #4
0
def test_intensity_panel(panel_image_name):
    img = image.Image(panel_image_name)
    pan = panel.Panel(img)
    mean, std, num, sat = pan.intensity()
    assert mean == pytest.approx(1162, rel=0.01)
    assert std == pytest.approx(23, rel=0.03)
    assert num == pytest.approx(26005, rel=0.02)
    assert sat == pytest.approx(0, abs=2)
Beispiel #5
0
def test_ordered_coordinates(panel_image_name):
    img = image.Image(panel_image_name)
    if img.panel_region is not None:
        ordered_corners = img.panel_region
    else:
        ordered_corners = [(809, 613), (648, 615), (646, 454), (808, 452)]
    pan = panel.Panel(img, panelCorners=ordered_corners)
    assert pan.ordered_panel_coordinates() == ordered_corners
Beispiel #6
0
def test_raw_panel(panel_image_name):
    img = image.Image(panel_image_name)
    pan = panel.Panel(img)
    mean, std, num, sat = pan.raw()
    assert mean == pytest.approx(45406.0, rel=0.01)
    assert std == pytest.approx(738.0, rel=0.05)
    assert num == pytest.approx(26005, rel=0.02)
    assert sat == pytest.approx(0, abs=2)
Beispiel #7
0
def test_raw_panel_manual():
    img = image.Image(panel_image_name())
    pan = panel.Panel(img,panelCorners=[[809, 613], [648, 615], [646, 454], [808, 452]])
    mean, std, num, sat = pan.raw()
    assert mean == pytest.approx(45406, rel=0.01)
    assert std == pytest.approx(738.0, rel=0.05)
    assert num == pytest.approx(26005, rel=0.001)
    assert sat == pytest.approx(0, abs=2)
Beispiel #8
0
def test_raw_panel_bad_corners():
    img = image.Image(panel_image_name())
    pan = panel.Panel(img,panelCorners=[[460, 599], [583, 599], [584, 478], [462, 477]])
    mean, std, num, sat = pan.raw()
    assert mean == pytest.approx(26965, rel=0.01)
    assert std == pytest.approx(15396.0, rel=0.05)
    assert num == pytest.approx(14824, rel=0.01)
    assert sat == pytest.approx(0, abs=2)
Beispiel #9
0
def test_panel_corners(panel_image_name):
    img = image.Image(panel_image_name)
    pan = panel.Panel(img)
    panel_pts = pan.panel_corners()
    good_pts = [[809, 613], [648, 615], [646, 454], [808, 452]]
    assert panel_pts is not None
    assert len(panel_pts) == len(good_pts)
    assert pan.serial == 'RP02-1603036-SC'
    for i, pt in enumerate(panel_pts):
        # different opencv/zbar versions round differently it seems
        assert pt[0] == pytest.approx(good_pts[i][0], abs=3)
        assert pt[1] == pytest.approx(good_pts[i][1], abs=3)
Beispiel #10
0
def test_qr_corners(panel_image_name):
    img = image.Image(panel_image_name)
    pan = panel.Panel(img)
    qr_corners = pan.qr_corners()
    good_qr_corners = [[460, 599], [583, 599], [584, 478], [462, 477]]
    assert qr_corners is not None
    assert len(qr_corners) == len(good_qr_corners)
    assert pan.serial == 'RP02-1603036-SC'
    for i, pt in enumerate(qr_corners):
        # different opencv/zbar versions round differently it seems
        assert pt[0] == pytest.approx(good_qr_corners[i][0], abs=3)
        assert pt[1] == pytest.approx(good_qr_corners[i][1], abs=3)
Beispiel #11
0
def test_altum_panel(altum_panel_image_name):
    img = image.Image(altum_panel_image_name)
    assert img.auto_calibration_image == True
    pan = panel.Panel(img)
    panel_pts = pan.panel_corners()
    good_pts = [[1278, 483], [1176, 491], [1184, 591], [1286, 583]]
    assert panel_pts is not None
    assert len(panel_pts) == len(good_pts)
    assert pan.serial == 'RP04-1901231-SC'
    print(panel_pts)
    for i, pt in enumerate(panel_pts):
        # different opencv/zbar versions round differently it seems
        assert pt[0] == pytest.approx(good_pts[i][0], abs=3)
        assert pt[1] == pytest.approx(good_pts[i][1], abs=3)
    assert pan.qr_corners() == None
Beispiel #12
0
def test_panel_corners(panel_image_name):
    img = image.Image(panel_image_name)
    pan = panel.Panel(img)
    panel_pts = pan.panel_corners()
    good_pts = [[809, 613], [648, 615], [646, 454], [808, 452]]
    assert panel_pts is not None
    assert len(panel_pts) == len(good_pts)
    assert pan.serial == 'RP02-1603036-SC'
    # the particular order of the points is not relevant
    # so sort by coordinates
    panel_pts = sorted(panel_pts, key=operator.itemgetter(0, 1))
    good_pts = sorted(good_pts, key=operator.itemgetter(0, 1))
    for i, pt in enumerate(panel_pts):
        # different opencv/zbar versions round differently it seems
        assert pt[0] == pytest.approx(good_pts[i][0], abs=3)
        assert pt[1] == pytest.approx(good_pts[i][1], abs=3)
Beispiel #13
0
def test_raw_panel_saturatedl(panel_image_name):
    img = image.Image(panel_image_name)
    pan = panel.Panel(img,
                      panelCorners=[[809, 613], [648, 615], [646, 454],
                                    [808, 452]])

    #saturate 2500 pixels in the raw image - note that on the undistorted image this
    #will result in 2329 saturated pixels
    i0 = img.undistorted(img.raw())
    i0[500:550, 700:750] = 4095 * 16 + 1
    img.set_undistorted(i0)

    mean, std, num, sat = pan.raw()
    assert mean == pytest.approx(47245, rel=0.01)
    assert std == pytest.approx(5846.1, rel=0.05)
    assert num == pytest.approx(26005, rel=0.001)
    assert sat == pytest.approx(2500, abs=0)
Beispiel #14
0
def test_RP06_panel_raw(panel_images_RP06):
    test_mean = [33082, 34347, 33971, 34186, 33371]
    test_std = [474.7, 582.6, 476.3, 464, 658.9]
    test_num = [3616, 3552, 3669, 3612, 3729]
    test_sat = [0, 0, 0, 0, 0]
    for i, m, s, n, sa in zip(panel_images_RP06, test_mean, test_std, test_num,
                              test_sat):
        img = image.Image(i)
        pan = panel.Panel(img)
        mean, std, num, sat = pan.raw()
        assert pan.panel_detected()
        print('mean {:f} std {:f} num {:f} sat {:f}'.format(
            mean, std, num, sat))
        print('m {:f} s {:f} n {:f} sa {:f}'.format(m, s, n, sa))
        assert mean == pytest.approx(m, rel=0.1)
        assert std == pytest.approx(s, rel=0.1)
        assert num == pytest.approx(n, rel=0.1)
        assert sat == pytest.approx(sa, rel=0.1)
Beispiel #15
0
def test_altum_panel(altum_panel_image_name):
    img = image.Image(altum_panel_image_name)
    assert img.auto_calibration_image == True
    pan = panel.Panel(img)
    panel_pts = pan.panel_corners()
    good_pts = [[1278, 483], [1176, 491], [1184, 591], [1286, 583]]
    assert panel_pts is not None
    assert len(panel_pts) == len(good_pts)
    assert pan.serial == 'RP04-1901231-SC'

    # the particular order of the points is not relevant
    # so sort by coordinates
    panel_pts = sorted(panel_pts, key=operator.itemgetter(0, 1))
    good_pts = sorted(good_pts, key=operator.itemgetter(0, 1))

    for i, pt in enumerate(panel_pts):
        # different opencv/zbar versions round differently it seems
        assert pt[0] == pytest.approx(good_pts[i][0], abs=3)
        assert pt[1] == pytest.approx(good_pts[i][1], abs=3)
    assert pan.qr_corners() == None
Beispiel #16
0
def test_irradiance_mean(panel_image_name):
    img = image.Image(panel_image_name)
    pan = panel.Panel(img)
    panel_reflectance = 0.67
    mean = pan.irradiance_mean(panel_reflectance)
    assert mean == pytest.approx(0.7984, rel=0.001)
Beispiel #17
0
def test_unordered_coordinates(panel_image_name):
    img = image.Image(panel_image_name)
    ordered_corners = [(809, 613), (648, 615), (646, 454), (808, 452)]
    unordered_corners = [(648, 615), (809, 613), (808, 452), (646, 454)]
    pan = panel.Panel(img, panelCorners=unordered_corners)
    assert pan.ordered_panel_coordinates() == ordered_corners

import os, glob
import micasense.image as image
import micasense.panel as panel

image_path = os.path.join('.','data','0000SET','000','IMG_0000_1.tif')
img = image.Image(image_path)
# panelCorners - if we dont have zbar installed to scan the QR codes, detect panel manually and 
panelCorners = [[[809,613],[648,615],[646,454],[808,452]],
                [[772,623],[613,625],[610,464],[770,462]],
                [[771,651],[611,653],[610,492],[770,490]],
                [[829,658],[668,659],[668,496],[829,496]],
                [[807,632],[648,634],[645,473],[805,471]]]

pnl = panel.Panel(img,panelCorners = panelCorners[0])
print("Panel found: {}".format(pnl.panel_detected()))
print("Panel serial: {}".format(pnl.serial))
print("QR Code Corners:\n{}".format(pnl.qr_corners()))
mean, std, count, saturated_count = pnl.raw()
print("Panel mean raw pixel value: {}".format(mean))
print("Panel raw pixel standard deviation: {}".format(std))
print("Panel region pixel count: {}".format(count))
print("Panel region saturated pixel count: {}".format(count))

pnl.plot();


# A notebook for experimenting with the `Panel` class can be found [here](Panels.html)

# ## micasense.ImageSet
Beispiel #19
0
def test_altum_lwir(altum_lwir_image_name):
    img = image.Image(altum_lwir_image_name)
    assert img.auto_calibration_image == False
    pan = panel.Panel(img)
    assert pan.panel_detected() == False
Beispiel #20
0
def test_panel_not_detected(flight_image_name):
    img = image.Image(flight_image_name)
    pan = panel.Panel(img)
    assert pan.panel_detected() == False
Beispiel #21
0
def test_RP06_panel_ID_autodetect(panel_image_name_RP06_blue):
    img = image.Image(panel_image_name_RP06_blue)
    pan = panel.Panel(img, ignore_autocalibration=True)
    qr_corners = pan.qr_corners()

    assert pan.panel_version == 6
Beispiel #22
0
def test_panel_detected(panel_image_name):
    img = image.Image(panel_image_name)
    pan = panel.Panel(img)
    assert pan.panel_detected() == True
Beispiel #23
0
def test_RP06_panel_ID(panel_image_name_RP06_blue):
    img = image.Image(panel_image_name_RP06_blue)
    pan = panel.Panel(img)
    qr_corners = pan.qr_corners()
    assert pan.panel_version == 6