测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A33022. 图像重建JWST (詹姆斯·韦伯太空望远镜,James Webb Space Telescope) 是一台红外波段的大型太空望远镜,由美国国家航空航天局 (NASA)、欧洲航天局 (ESA) 和加拿大航天局 (CSA) 共同合作开发。它是哈勃太空望远镜的科学继任者,旨在解决一系列重要的天文学问题,包括宇宙的起源、星系的形成和演化、恒星和行星系统的形成,以及寻找宜居行星和生命迹象。以下是 JWST…

填空题 困难

题目描述

图像重建

JWST (詹姆斯·韦伯太空望远镜,James Webb Space Telescope) 是一台红外波段的大型太空望远镜,由美国国家航空航天局 (NASA)、欧洲航天局 (ESA) 和加拿大航天局 (CSA) 共同合作开发。它是哈勃太空望远镜的科学继任者,旨在解决一系列重要的天文学问题,包括宇宙的起源、星系的形成和演化、恒星和行星系统的形成,以及寻找宜居行星和生命迹象。

以下是 JWST 望远镜 5 月 23 日采集的深空图像:

太空望远镜在采集数据时,并不像我们日常生活中的手机或相机 “一次拍摄成像” 直接从传感器数据得到照片,而是由多次不同时段拍摄的图像拼接而成。在这个问题中,我们也来实现图像的拼接重建。

我们已经对一个区域拍摄了两张黑白图像。这两张图像面向同一区域拍摄,因此我们预期它们有相当一部分都是重叠的。你的任务就是将两张图像经过上下左右平移后尽可能 “重叠” 在一起,满足重叠部分所有像素均完全相同,且重叠部分的面积尽可能大 (即重叠部分的像素数量尽可能多)。

输入格式

输入数据由两张图像的描述组成。两张图像的描述之间有一个空行。

对于每张图像,第一行包含两个整数 n 和 m,代表了图像的尺寸 (像素的行数和列数)。接下来n 行,每行 m 个像素描述了拍摄的图像,其中 0 表示一个黑色像素,1 表示一个白色像素。每一行的像素由一个空格分隔。

输出格式

输出一行一个整数,即经过最优平移后,重叠部分的像素数量。

样例输入 1

3 3

0 0 0

0 1 1

0 1 1

2 4

1 1 0 0

1 1 0 1

样例输出 1

4

压缩包中包含更多的样例数据。

数据规模

对于 100% 的数据,满足 1 ≤ n, m ≤ 50。

参考答案

#include <iostream> #include <vector> using namespace std; int main() { int n1, m1, n2, m2; cin >> n1 >> m1; vector<vector<int>> img1(n1, vector<int>(m1)); for (int i = 0; i < n1; ++i) { for (int j = 0; j < m1; ++j) { cin >> img1[i][j]; } } cin >> n2 >> m2; vector<vector<int>> img2(n2, vector<int>(m2)); for (int i = 0; i < n2; ++i) { for (int j = 0; j < m2; ++j) { cin >> img2[i][j]; } } int max_overlap = 0; for (int dx = -n1; dx < n2; ++dx) { for (int dy = -m1; dy < m2; ++dy) { int overlap = 0, non_overlap = 0; for (int i = 0; i < n1; ++i) { for (int j = 0; j < m1; ++j) { int x = i + dx; int y = j + dy; if (x >= 0 && x < n2 && y >= 0 && y < m2) { if (img1[i][j] == img2[x][y]) { ++overlap; } else { ++non_overlap; } } } } if (non_overlap == 0) { max_overlap = max(max_overlap, overlap); } } } cout << max_overlap << endl; return 0; }

答案解析

通过这种枚举平移方式的方法,我们可以找到使得重叠部分像素数量最大的平移方式,并输出最大重叠像素数量。

上一题 下一题