Python和C++胶体粒子三维残差算法模型和细化亚像素算法

101 篇文章 5 订阅
57 篇文章 0 订阅

🎯要点

  1. 使用信噪比、对比度噪声比和点扩展函数量化实验数据,增强共聚焦显微镜成像。
  2. 参考粒子跟踪算法:使用二维和三维径向模型细化亚像素。
  3. 胶体粒子三维图形分割学习模型模拟检测球形胶体。
  4. 使用网格搜索优化模型和归一化处理以避免光漂白。

🍪语言内容分比

在这里插入图片描述
在这里插入图片描述

🍇Python去噪平滑

峰值信噪比是一个工程术语,表示信号的最大可能功率与影响其表示保真度的破坏性噪声功率之间的比率。由于许多信号的动态范围非常宽,因此 PSNR 通常使用分贝标度表示为对数值。通常用于量化经过有损压缩的图像和视频的重建质量。

峰值信噪比最容易通过均方误差 (MSE) 来定义。给定一个无噪声的 m × n m \times n m×n 单色图像 I 及其噪声近似值 K , M S E K, M S E K,MSE 定义为
M S E = 1 m n ∑ i = 0 m − 1 ∑ j = 0 n − 1 [ I ( i , j ) − K ( i , j ) ] 2 M S E=\frac{1}{m n} \sum_{i=0}^{m-1} \sum_{j=0}^{n-1}[I(i, j)-K(i, j)]^2 MSE=mn1i=0m1j=0n1[I(i,j)K(i,j)]2
峰值信噪比定义为:
P S N R = 10 ⋅ log ⁡ 10 ( M A X I 2 M S E ) = 20 ⋅ log ⁡ 10 ( M A X I M S E ) = 20 ⋅ log ⁡ 10 ( M A X I ) − 10 ⋅ log ⁡ 10 ( M S E ) \begin{aligned} P S N R & =10 \cdot \log _{10}\left(\frac{M A X_I^2}{M S E}\right) \\ & =20 \cdot \log _{10}\left(\frac{M A X_I}{\sqrt{M S E}}\right) \\ & =20 \cdot \log _{10}\left(M A X_I\right)-10 \cdot \log _{10}(M S E) \end{aligned} PSNR=10log10(MSEMAXI2)=20log10(MSE MAXI)=20log10(MAXI)10log10(MSE)
这里, M A X M A X MAX 是图像的最大可能像素值。当像素使用每个样本 8 位表示时,该值为 255 。更一般地,当样本使用每个样本 B B B 位的线性 PCM 表示时, M A X l M A X_l MAXl 2 B − 1 2^B-1 2B1

Python代码化数学定义:

from math import log10, sqrt 
import cv2 
import numpy as np 

def PSNR(original, compressed): 
	mse = np.mean((original - compressed) ** 2) 
	if(mse == 0): 
		return 100
	max_pixel = 255.0
	psnr = 20 * log10(max_pixel / sqrt(mse)) 
	return psnr 

def main(): 
	original = cv2.imread("original_image.png") 
	compressed = cv2.imread("compressed_image.png", 1) 
	value = PSNR(original, compressed) 
	print(f"PSNR value is {value} dB") 
	
if __name__ == "__main__": 
	main() 

PSNR value is 43.862955653517126 dB

Python去噪平滑图像噪声

应用滤波器来减轻各种类型的噪声(如高斯、椒盐、斑点、泊松和指数)来去除图像噪声。我们将利用 Python 的 scipy.ndimage 和 skimage 库来演示均值和中值滤波器在噪声图像上的应用,并使用峰值信噪比 (PSNR) 比较它们的有效性。

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from skimage.io import imread
from skimage.color import rgb2gray
from skimage.util import random_noise
from skimage.metrics import peak_signal_noise_ratio as compare_psnr
from scipy.ndimage import uniform_filter, median_filter

我们定义一个函数用于可视化目的。

def plt_hist(noise, title='Noise Histogram', bins=None):
    plt.grid()
    plt.hist(noise.ravel(), bins=bins, alpha=0.5, color='green')
    plt.tick_params(labelsize=15)
    plt.title(title, size=25)

def plt_images(original_img, noisy_img, denoised_mean_img, denoised_median_img, noise, noise_type):
    fig, axes = plt.subplots(1, 4, figsize=(20, 5))
    ax = axes.ravel()

    ax[0].imshow(original_img, cmap='gray')
    ax[0].set_title('Original', size=20)
    ax[0].axis('off')

    ax[1].imshow(noisy_img, cmap='gray')
    ax[1].set_title(f'Noisy ({noise_type})', size=20)
    ax[1].axis('off')

    ax[2].imshow(denoised_mean_img, cmap='gray')
    ax[2].set_title('Denoised (Mean)', size=20)
    ax[2].axis('off')

    ax[3].imshow(denoised_median_img, cmap='gray')
    ax[3].set_title('Denoised (Median)', size=20)
    ax[3].axis('off')

    plt.figure()
    plt_hist(noise, title=f'{noise_type} Noise Histogram')
    plt.show()

    print(f"PSNR (Original vs Noisy): {compare_psnr(original_img, noisy_img):.3f}")
    print(f"PSNR (Original vs Denoised Mean): {compare_psnr(original_img, denoised_mean_img):.3f}")
    print(f"PSNR (Original vs Denoised Median): {compare_psnr(original_img, denoised_median_img):.3f}")

Loading the image and converting to Gray scale
image_path = 'lena.png'  
original_img = rgb2gray(imread(image_path))

去噪

denoised_mean_img = uniform_filter(noisy_img, size=5)
denoised_median_img = median_filter(noisy_img, size=5)
plt_images(original_img, noisy_img, denoised_mean_img, denoised_median_img, noisy_img-original_img, 'Gaussian')

构建自动编码器模型

class Autoencoder(nn.Module):
    def __init__(self):
        super(Autoencoder, self).__init__()
        self.encoder = nn.Sequential(
            nn.Linear(50 * 37, 512),
            nn.ReLU(True),
            nn.Linear(512, 128),
            nn.ReLU(True))
        self.decoder = nn.Sequential(
            nn.Linear(128, 512),
            nn.ReLU(True),
            nn.Linear(512, 50 * 37),
            nn.Sigmoid())  

    def forward(self, x):
        x = x.view(-1, 50 * 37)
        x = self.encoder(x)
        x = self.decoder(x)
        return x.view(-1, 1, 50, 37)

model = Autoencoder()

对于训练,我们将使用二元交叉熵损失来衡量原始图像和重建图像之间的差异,并使用 Adam 优化器进行权重更新。

👉参阅、更新:计算思维 | 亚图跨际

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值