宠物发布网站模板,简单的房源展示网站开发,京伦科技网站做的怎么样,长沙 网站设计 公司支持添加噪点类型包括#xff1a;添加高斯噪点、添加椒盐噪点、添加波动噪点、添加泊松噪点、添加周期性噪点、添加斑点噪点、添加相位噪点#xff0c;还提供清除噪点的功能。
我们先看一下实测效果#xff1a;#xff08;test.jpg为原图#xff0c;new.jpg为添加后的图片…支持添加噪点类型包括添加高斯噪点、添加椒盐噪点、添加波动噪点、添加泊松噪点、添加周期性噪点、添加斑点噪点、添加相位噪点还提供清除噪点的功能。
我们先看一下实测效果test.jpg为原图new.jpg为添加后的图片
测试添加椒盐噪点 测试添加波动噪点 测试添加高斯噪点 针对上面刚生成的添加了30高斯噪点的图片测试清理噪点的效果 这里清除噪点采用的是中值滤波器其实还有很多其他类型的滤波器各有其优势和适用场景。 效果还是有的但是我在测使处理斑点噪点时效果不理想因此这个噪点清除主要还是用于原图的一个处理优化用于人为严重的噪点处理起来效果不太好。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
下面介绍一下上述七种类型的噪点生成的方法和去除噪点的原理
高斯噪点选项1
方法通过在每个像素的颜色通道上添加服从正态分布的随机数模拟真实场景中的随机噪点。 参数强度intensity表示添加的噪点的强度即随机数的标准差。 椒盐噪点选项2
方法在图像中随机选择像素并将其设置为黑色或白色模拟图像中的椒盐噪点。 参数密度density表示椒盐噪点的比例即在图像中设置为黑色或白色的像素的比例。 波动噪点选项3
方法在每个像素的颜色通道上添加从均匀分布中随机选择的整数模拟图像中的波动噪点。 参数强度intensity表示添加的波动噪点的强度即随机整数的范围。 泊松噪点选项4
方法使用泊松分布生成噪点模拟一些自然场景中的光子计数的泊松分布。 参数泊松噪点无需用户指定参数。 周期性噪点选项5
方法在图像中添加具有特定频率的正弦波噪点模拟周期性干扰。 参数频率frequency表示添加的正弦波噪点的频率。 斑点噪点选项6
方法在图像中随机选择位置并将其设置为具有随机颜色的斑点模拟斑点噪点。 参数密度density表示斑点噪点的比例即在图像中设置为斑点的像素的比例。 相位噪点选项7
方法在图像的相位上引入随机值模拟相位噪点。 参数强度intensity表示添加的相位噪点的强度即在相位上引入的随机值的范围。 清除噪点选项8
方法使用中值滤波器去除图像中的噪点。 参数清除噪点无需指定参数。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
对于亮度各位可以自行设置我代码里给的是20关于亮度设置的一些建议
风景照片10到20之间
一幅风景照片可能在稍微提高亮度后更加清晰和宜人。 人物照片5到15之间
对于人物照片适度的亮度提升可能会使面部特征更加清晰但不要过分。 黑白照片0到10之间。 在黑白照片中适度的亮度提升可以改善整体对比度。 艺术照片-10到10之间。
对于一些艺术性质的照片可以尝试一些负值以产生一些有趣的阴影效果。 室内照片5到15之间。 室内照片可能因光线不足而显得较暗轻微提升亮度可以改善整体亮度。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
下面附上源码其中图片所在路径以及生成图片放置路径改成自己的即可
from PIL import Image, ImageFilter
import numpy as np
from typing import Tupledef change_brightness(img: Image, level: float) - Image:调整 PIL 图像的亮度到指定水平。def brightness(c: int) - float:对每个位执行的基本变换/操作。return 128 level (c - 128)if not -50.0 level 50.0:raise ValueError(亮度水平必须在 -50.0 到 50.0 之间)return img.point(brightness)def add_gaussian_noise(img: Image, intensity: float) - Image:向 PIL 图像添加高斯噪点。if not 0.0 intensity 30.0:raise ValueError(高斯噪点强度必须在 0.0 到 30.0 之间)np_img np.array(img)noise np.random.normal(scaleintensity, sizenp_img.shape)noisy_img np_img noisenoisy_img np.clip(noisy_img, 0, 255).astype(np.uint8)return Image.fromarray(noisy_img)def add_salt_and_pepper_noise(img: Image, density: float) - Image:向 PIL 图像添加椒盐噪点。if not 0.0 density 1.0:raise ValueError(椒盐噪点密度必须在 0.0 到 1.0 之间)np_img np.array(img)salt_and_pepper np.random.rand(*np_img.shape[:2])noisy_img np_img.copy()noisy_img[salt_and_pepper density / 2] 0noisy_img[salt_and_pepper (1 - density / 2)] 255return Image.fromarray(noisy_img)def add_random_noise(img: Image, intensity: float) - Image:向 PIL 图像添加波动噪点。if not 0.0 intensity 30.0:raise ValueError(波动噪点强度必须在 0.0 到 30.0 之间)np_img np.array(img)noise np.random.randint(-intensity, intensity 1, sizenp_img.shape)noisy_img np_img noisenoisy_img np.clip(noisy_img, 0, 255).astype(np.uint8)return Image.fromarray(noisy_img)def add_poisson_noise(img: Image) - Image:向 PIL 图像添加泊松噪点。np_img np.array(img)noisy_img np.random.poisson(np_img)noisy_img np.clip(noisy_img, 0, 255).astype(np.uint8)return Image.fromarray(noisy_img)def add_periodic_noise(img: Image, frequency: float) - Image:向 PIL 图像添加周期性噪点。if not 0.0 frequency 0.5:raise ValueError(周期性噪点频率必须在 0.0 到 0.5 之间)np_img np.array(img)rows, cols, _ np_img.shapex np.arange(cols)y np.arange(rows)X, Y np.meshgrid(x, y)noise np.sin(2 * np.pi * frequency * X / cols) np.sin(2 * np.pi * frequency * Y / rows)noisy_img np_img 30 * noise[:, :, np.newaxis]noisy_img np.clip(noisy_img, 0, 255).astype(np.uint8)return Image.fromarray(noisy_img)def add_spotty_noise(img: Image, density: float) - Image:向 PIL 图像添加斑点噪点。if not 0.0 density 1.0:raise ValueError(斑点噪点密度必须在 0.0 到 1.0 之间)np_img np.array(img)spotty np.random.rand(*np_img.shape[:2])noisy_img np_img.copy()noise np.random.randint(0, 256, size(np_img.shape[0], np_img.shape[1], 3))noisy_img[spotty density] noise[spotty density]return Image.fromarray(noisy_img)def add_phase_noise(img: Image, intensity: float) - Image:向 PIL 图像添加相位噪点。if not 0.0 intensity 30.0:raise ValueError(相位噪点强度必须在 0.0 到 30.0 之间)np_img np.array(img)phase np.random.uniform(-intensity, intensity, sizenp_img.shape[:2])noisy_img np_img * np.exp(1j * phase[:, :, np.newaxis])noisy_img np.abs(noisy_img).astype(np.uint8)return Image.fromarray(noisy_img)def remove_noise(img: Image) - Image:清除 PIL 图像中的所有噪点。return img.filter(ImageFilter.MedianFilter(size3))if __name__ __main__:# 加载图像image_path D:/swctf/image/test.jpgwith Image.open(image_path) as img:# 将亮度调整为20bright_img change_brightness(img, 20)# 用户选择操作类型print(选择操作类型:)print(1: 添加高斯噪点)print(2: 添加椒盐噪点)print(3: 添加波动噪点)print(4: 添加泊松噪点)print(5: 添加周期性噪点)print(6: 添加斑点噪点)print(7: 添加相位噪点)print(8: 清除噪点)operation_type input(请输入选项数字: )# 根据操作类型明确输入范围和类型if operation_type 1:intensity float(input(请输入高斯噪点强度0.0 到 30.0: ))processed_img add_gaussian_noise(bright_img, intensity)elif operation_type 2:intensity float(input(请输入椒盐噪点密度0.0 到 1.0: ))processed_img add_salt_and_pepper_noise(bright_img, intensity)elif operation_type 3:intensity float(input(请输入波动噪点强度0.0 到 30.0: ))processed_img add_random_noise(bright_img, intensity)elif operation_type 4:processed_img add_poisson_noise(bright_img)elif operation_type 5:frequency float(input(请输入周期性噪点频率0.0 到 0.5: ))processed_img add_periodic_noise(bright_img, frequency)elif operation_type 6:density float(input(请输入斑点噪点密度0.0 到 1.0: ))processed_img add_spotty_noise(bright_img, density)elif operation_type 7:intensity float(input(请输入相位噪点强度0.0 到 30.0: ))processed_img add_phase_noise(bright_img, intensity)elif operation_type 8:processed_img remove_noise(bright_img)else:raise ValueError(不支持的操作类型)# 保存处理后的图像output_path D:/swctf/image/new.jpgprocessed_img.save(output_path, formatjpeg)print(f处理后的图像已保存至: {output_path})