最终计算MSE与PSNR均无法的出

img

编写数据文件处理程序,要求:(1)读取数据文件内容,显示数据文件行数;(2)申请数据内存存放数据文件;(3)计算第2-4列数据与第1列数据对比的MSE值和PSNR值,并显示输出。这个是题目,上面的照片是我能打出来的最大程度

printf("PSNR值:%lf\n",psnr);

麻烦采纳一下哈,谢谢啦

下面是一个简单的数据文件处理程序的示例代码,用于读取数据文件并进行数据处理:


#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <cmath>

using namespace std;

int main() {
    // 读取数据文件
    string filename = "data.txt";
    ifstream infile(filename);
    if (!infile) {
        cerr << "Error: Unable to open file " << filename << endl;
        return 1;
    }

    // 统计文件行数
    int num_lines = 0;
    string line;
    while (getline(infile, line)) {
        num_lines++;
    }
    infile.close();
    cout << "Number of lines in the file: " << num_lines << endl;

    // 申请内存并读取数据
    vector<vector<double>> data(num_lines, vector<double>(4));
    infile.open(filename);
    for (int i = 0; i < num_lines; i++) {
        for (int j = 0; j < 4; j++) {
            infile >> data[i][j];
        }
    }
    infile.close();

    // 计算 MSE 和 PSNR
    double mse = 0.0;
    double max_value = 255.0;
    for (int i = 0; i < num_lines; i++) {
        double diff = data[i][1] - data[i][0];
        mse += diff * diff;
    }
    mse /= num_lines;
    double psnr = 10 * log10(max_value * max_value / mse);

    // 输出结果
    cout << "MSE: " << mse << endl;
    cout << "PSNR: " << psnr << endl;

    return 0;
}

在这个代码中,我们首先读取数据文件并统计文件行数。然后我们申请内存并读取数据文件中的数据。接下来,我们计算第 2-4 列数据与第 1 列数据的 MSE 值和 PSNR 值。最后,我们输出计算结果。

需要注意的是,这个程序假定数据文件中每行有 4 列数据,其中第 1 列数据为参考值,第 2-4 列数据为需要计算的值。如果数据文件的格式不同,需要根据实际情况修改程序。