1
2 /* 8kͼ--->2��4kͼ������LDCH�ּ�У�� */
test030()3 void test030()
4 {
5 int srcW = 7680;
6 int srcH = 4320;
7 int dstW = 7680;
8 int dstH = 4320;
9 int margin = 256;
10
11 /* ȫͼ8k��ز��� */
12 CameraCoeff camCoeff;
13 camCoeff.a0 = -4628.92834904855135391699150204658508300781250000000000;
14 camCoeff.a2 = 0.00008439805632153267055031026222522427815420087427;
15 camCoeff.a3 = -0.00000000947972529654520536345924537060744774485954;
16 camCoeff.a4 = 0.00000000000276046059610868196196561020719728129884;
17 camCoeff.cx = (srcW - 1.0) * 0.5;
18 camCoeff.cy = (srcH - 1.0) * 0.5;
19 LdchParams ldchParams;
20 ldchParams.saveMaxFovX = 0; /* ����ˮƽx�������FOV: 1������, 0�������� */
21 ldchParams.isLdchOld = 1; /* �Ƿ�ɰ�LDCH: 1�����ǣ�0������ */
22 ldchParams.saveMeshX = 1; /* �Ƿ�MeshX.bin�ļ�: 1������, 0�������� */
23 sprintf(ldchParams.meshPath, "../data_out/"); /* ����MeshX.bin�ļ��ĸ�Ŀ¼ */
24 /* ��ͼ4k��ز��� */
25 CameraCoeff camCoeff_left;
26 LdchParams ldchParams_left;
27 /* ��ͼ4k��ز��� */
28 CameraCoeff camCoeff_right;
29 LdchParams ldchParams_right;
30 /* LDCH��ز�����ʼ�� */
31 genLdchMeshInit8kTo4k(srcW, srcH, dstW, dstH, margin, camCoeff, camCoeff_left, camCoeff_right, ldchParams, ldchParams_left, ldchParams_right);
32 /* ӳ���buffer���� */
33 unsigned short *pMeshX = new unsigned short[ldchParams.meshSize]; /* ȫͼ */
34 unsigned short *pMeshX_left = new unsigned short[ldchParams_left.meshSize]; /* ��ͼ */
35 unsigned short *pMeshX_right = new unsigned short[ldchParams_right.meshSize]; /* ��ͼ */
36
37 /* �������ͼ��buffer���� */
38 /* ȫͼ */
39 unsigned long srcSize = (srcW * srcH) > (dstW * dstH) ? (srcW * srcH) : (dstW * dstH);
40 unsigned short *pImgIn = new unsigned short[srcSize * 3];
41 unsigned short *pImgOut = new unsigned short[srcSize * 3];
42 /* ��ͼ */
43 int srcW_left = srcW * 0.5 + margin;
44 int srcH_left = srcH;
45 int dstW_left = srcW * 0.5 + margin;
46 int dstH_left = srcH;
47 unsigned long srcSize_left = (srcW_left * srcH_left) > (dstW_left * dstH_left) ? (srcW_left * srcH_left) : (dstW_left * dstH_left);
48 unsigned short *pImgIn_left = new unsigned short[srcSize_left * 3];
49 unsigned short *pImgOut_left = new unsigned short[srcSize_left * 3];
50 /* ��ͼ */
51 int srcW_right = srcW * 0.5 + margin;
52 int srcH_right = srcH;
53 int dstW_right = srcW * 0.5 + margin;
54 int dstH_right = srcH;
55 unsigned long srcSize_right = (srcW_right * srcH_right) > (dstW_right * dstH_right) ? (srcW_right * srcH_right) : (dstW_right * dstH_right);
56 unsigned short *pImgIn_right = new unsigned short[srcSize_right * 3];
57 unsigned short *pImgOut_right = new unsigned short[srcSize_right * 3];
58
59 /* ��ȡ����ͼ�� */
60 char srcBGRPath[256] = "../data_in/image/group_023_imx415_2.8mm_7680x4320_half/imx415_2.8mm_full_7680x4320_08.bmp";
61 readRGBforLDCH(srcBGRPath, srcW, srcH, pImgIn);
62 char srcBGRPath_left[256] = "../data_in/image/group_023_imx415_2.8mm_7680x4320_half/imx415_2.8mm_left_4096x4320_08.bmp";
63 readRGBforLDCH(srcBGRPath_left, srcW_left, srcH_left, pImgIn_left);
64 char srcBGRPath_right[256] = "../data_in/image/group_023_imx415_2.8mm_7680x4320_half/imx415_2.8mm_right_4096x4320_08.bmp";
65 readRGBforLDCH(srcBGRPath_right, srcW_right, srcH_right, pImgIn_right);
66
67 /* ����LDCHӳ�������У�� */
68 int level = 0; /* level��Χ: 0-255 */
69 int levelValue[] = { 0,64,128,192,255 };
70 //for (level = 0; level <= 255; level = level + 1)
71 for (int levelIdx = 0; levelIdx < 5; ++levelIdx)
72 {
73 level = levelValue[levelIdx];
74 printf("level = %d\n", level);
75
76 /* ��ͼ����LDCHУ�� */
77 bool success_left = genLDCMeshNLevel(ldchParams_left, camCoeff_left, level, pMeshX_left); /* ���ɶ�ӦУ��level��LDCHӳ��� */
78 LDCH_Cmodel(dstW_left, dstH_left, pImgIn_left, pImgOut_left, pMeshX_left); /* ����LDCH_Cmodel */
79 cv::Mat dstImgBGR_left;
80 ldchOut2Mat(dstW_left, dstH_left, 8, pImgOut_left, dstImgBGR_left); /* LDCH������תΪcv::Mat��ʽ */
81 char dstBmpPath_left[256]; /* ���� */
82 sprintf(dstBmpPath_left, "../data_out/ldch_left_%dx%d_level%03d.bmp", dstW_left, dstH_left, level);
83 cv::imwrite(dstBmpPath_left, dstImgBGR_left);
84
85 /* ��ͼ����LDCHУ�� */
86 bool success_right = genLDCMeshNLevel(ldchParams_right, camCoeff_right, level, pMeshX_right); /* ���ɶ�ӦУ��level��LDCHӳ��� */
87 LDCH_Cmodel(dstW_right, dstH_right, pImgIn_right, pImgOut_right, pMeshX_right); /* ����LDCH_Cmodel */
88 cv::Mat dstImgBGR_right;
89 ldchOut2Mat(dstW_right, dstH_right, 8, pImgOut_right, dstImgBGR_right); /* LDCH������תΪcv::Mat��ʽ */
90 char dstBmpPath_right[256]; /* ���� */
91 sprintf(dstBmpPath_right, "../data_out/ldch_right_%dx%d_level%03d.bmp", dstW_right, dstH_right, level);
92 cv::imwrite(dstBmpPath_right, dstImgBGR_right);
93
94 /* ��֤: ȫͼ����LDCHУ�� */
95 bool success_full = genLDCMeshNLevel(ldchParams, camCoeff, level, pMeshX); /* ���ɶ�ӦУ��level��LDCHӳ��� */
96 LDCH_Cmodel(dstW, dstH, pImgIn, pImgOut, pMeshX); /* ����LDCH_Cmodel */
97 cv::Mat dstImgBGR_full;
98 ldchOut2Mat(dstW, dstH, 8, pImgOut, dstImgBGR_full); /* LDCH������תΪcv::Mat��ʽ */
99 char dstBmpPath_full[256]; /* ���� */
100 sprintf(dstBmpPath_full, "../data_out/ldch_full_%dx%d_level%03d.bmp", dstW, dstH, level);
101 cv::imwrite(dstBmpPath_full, dstImgBGR_full);
102
103 /* ��֤: ��ͼFEC��� + ��ͼFEC��� ---> ƴ�ӵ�ȫͼ��� */
104 cv::Mat dstImgBGR_stitch = cv::Mat(dstH, dstW, CV_8UC3);
105 dstImgBGR_left(cv::Range(0, dstH_left), cv::Range(0, dstW_left - margin)).copyTo(dstImgBGR_stitch(cv::Range(0, dstH), cv::Range(0, dstW * 0.5)));
106 dstImgBGR_right(cv::Range(0, dstH_left), cv::Range(margin, dstW_right)).copyTo(dstImgBGR_stitch(cv::Range(0, dstH), cv::Range(dstW * 0.5, dstW)));
107 char dstBmpPath_stitch[256];
108 sprintf(dstBmpPath_stitch, "../data_out/ldch_stitch_%dx%d_level%03d.bmp", dstW, dstH, level);
109 cv::imwrite(dstBmpPath_stitch, dstImgBGR_stitch);
110 }
111 /* ȫͼ����ڴ��ͷźͷ���ʼ�� */
112 delete[] pImgIn; /* �ڴ��ͷ� */
113 delete[] pImgOut;
114 delete[] pMeshX;
115 genLdchMeshDeInit(ldchParams); /* ����ʼ�� */
116
117 /* ��ͼ����ڴ��ͷźͷ���ʼ�� */
118 delete[] pImgIn_left; /* �ڴ��ͷ� */
119 delete[] pImgOut_left;
120 delete[] pMeshX_left;
121 genLdchMeshDeInit(ldchParams_left); /* ����ʼ�� */
122
123 /* ��ͼ����ڴ��ͷźͷ���ʼ�� */
124 delete[] pImgIn_right; /* �ڴ��ͷ� */
125 delete[] pImgOut_right;
126 delete[] pMeshX_right;
127 genLdchMeshDeInit(ldchParams_right); /* ����ʼ�� */
128 }