imgCropping.py 1.28 KB
Newer Older
Wei Chengliang's avatar
Wei Chengliang committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import os,sys
import numpy as np
from astropy.io import fits

PRESCAN_X, IMAGE_X, OVERSCAN_X = 27, 1152, 71
PRESCAN_Y, IMAGE_Y, OVERSCAN_Y = 0, 4616, 84
BLOCK_WIDTH = PRESCAN_X + IMAGE_X + OVERSCAN_X

def process_single_file(filename):
    with fits.open(filename) as hdul:
        data = hdul[1].data

    data = data[PRESCAN_Y : PRESCAN_Y + IMAGE_Y, :]
    blocks = [data[:, i * BLOCK_WIDTH + PRESCAN_X : (i + 1) * BLOCK_WIDTH - OVERSCAN_X] for i in range(16)]

    blocks_a = np.concatenate(blocks[:4], axis=1)
    blocks_b = np.concatenate([np.fliplr(b) for b in blocks[4:8]], axis=1)
    blocks_c = np.concatenate([np.flipud(np.fliplr(b)) for b in blocks[11:7:-1]], axis=1)
    blocks_d = np.concatenate([np.flipud(b) for b in blocks[15:11:-1]], axis=1)

    blocks_dc = np.concatenate([blocks_d, blocks_c], axis=1)
    blocks_ab = np.concatenate([blocks_a, blocks_b], axis=1)
    blocks_final = np.concatenate([blocks_ab, blocks_dc], axis=0)

    output_path = os.path.splitext(fn)[0]+'_cropping.fits'
    fits.writeto(output_path, blocks_final, overwrite=True)
    print(f"OK:{output_path}")

if __name__ == "__main__":
    if len(sys.argv) > 1:
        fn = sys.argv[1]
    else:
        fn = 'CSST_MSC_MS_WIDE_20281024132057_20281024132327_10100484833_08_L0_V01.fits'

    process_single_file(fn)