读取文件夹内png做多帧均值方差拟合

下面是一个用Python实现的代码,来读取一个文件夹下连续抓拍的150张PNG图片,计算每个像素点在150帧内的均值和方差,然后在14个3x3的矩形ROI内进行拟合。

我们将使用OpenCV读取图片,NumPy进行计算,并用scipy进行线性回归拟合。

import cv2
import numpy as np
import os
from glob import glob
from scipy.stats import linregress

# 文件夹路径
folder_path = 'path_to_your_images_folder'

# 读取所有PNG图片文件
image_files = sorted(glob(os.path.join(folder_path, '*.png')))

# 检查是否有150张图片
if len(image_files) != 150:
    raise ValueError("图片数量不足150张")

# 读取所有图片并存储到一个列表中
images = [cv2.imread(img, cv2.IMREAD_GRAYSCALE) for img in image_files]

# 转换为NumPy数组,方便后续计算
images = np.array(images)

# 定义14个ROI,每个ROI为3x3的矩形
rois = [
    (10, 10), (20, 20), (30, 30), (40, 40), (50, 50),
    (60, 60), (70, 70), (80, 80), (90, 90), (100, 100),
    (110, 110), (120, 120), (130, 130), (140, 140)
]

# 保存均值和方差的列表
means = []
variances = []

# 计算每个ROI内的均值和方差
for (x, y) in rois:
    roi_pixels = images[:, y:y+3, x:x+3].reshape(150, -1)
    mean = np.mean(roi_pixels, axis=0)
    var = np.var(roi_pixels, axis=0)
    means.extend(mean)
    variances.extend(var)

# 转换为NumPy数组
means = np.array(means)
variances = np.array(variances)

# 进行线性回归拟合
slope, intercept, r_value, p_value, std_err = linregress(means, variances)

print(f'拟合结果: var = {slope:.4f} * mean + {intercept:.4f}')
print(f'R值: {r_value:.4f}')
print(f'P值: {p_value:.4f}')
print(f'标准误差: {std_err:.4f}')

代码解释

  1. 读取图片

    • 使用OpenCV读取文件夹下的所有PNG图片。
    • 确保读取的图片数量为150张。
    • 将所有图片存储为一个NumPy数组,方便后续计算。
  2. 定义ROI

    • 定义14个3x3的矩形ROI,ROI的左上角坐标保存在一个列表中。
  3. 计算均值和方差

    • 对于每个ROI,提取ROI内的像素点,计算每个像素点在150帧内的均值和方差。
    • 将计算结果保存在meansvariances列表中。
  4. 线性回归拟合

    • 使用scipy.stats.linregress进行线性回归拟合,拟合出方差和均值之间的线性关系。

注意事项

  • 请确保folder_path指向包含150张PNG图片的文件夹。
  • 代码假设图片大小足够大,能够包含所定义的ROI区域。

如果有其他需求或改进,请告知!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值