如何从两个相似的图像中提取噪声?

问题描述 投票:1回答:2

我有两个相似(不相同)的图像。一个有噪声,另一个是原始的无噪声。我想通过两个图像的差异提取噪声并将提取的噪声添加到原始图像,以使两个图像相同。原始图像由数码相机捕获。使用网络摄像头从监视器捕获噪点图像(显示原始图像)。

Original Image

Captured using webcam pointing to monitor displaying original image

import cv2

orig_image = cv2.imread("./00029_68.jpg")
cam_image = cv2.imread("/home/ankit/Captured_using_webcam.png")

cv2.imshow("Subtracted Image : cam_image - orig_image", 
cv2.subtract(cam_image, orig_image))
cv2.waitKey(0)
cv2.destroyAllWindows()
python opencv image-processing computer-vision noise
2个回答
0
投票

我不确定您是否知道问题的复杂性。您的问题是:-原始和“嘈杂”图像的分辨率不同-翻译错误-拍摄原始照片时透视失真

从理论上讲,您可以在cv2中找到可以处理这些问题的图像处理工具。当您能够消除失真时,您只需应用发布的代码即可查看由于相机,监视器和所做的所有计算的系统错误而导致的噪声。


0
投票

为了找到两个图像之间的差异,可以利用在Image Quality Assessment: From Error Visibility to Structural Similarity中引入的结构相似性指数(SSIM)。该方法已经在scikit-image库中用于图像处理。您可以将scikit-imagepip install scikit-image一起安装。

使用scikit-image中的compare_ssim()函数,它将返回score和差异图像diffscore代表两个输入图像之间的结构相似性指标,并且可以落在[-1,1]范围内,其值更接近一个代表更高相似性的值。但是,由于您只对两个图像的不同之处感兴趣,因此diff图像是您想要的。 diff图像包含两个图像之间的实际图像差异。

这里是两个图像之间的实际差异。考虑使用.png图像,因为它们无损。 .jpg图像有损,并且由于图像压缩而产生噪点。

enter image description here

代码

from skimage.measure import compare_ssim
import cv2

# Load images
image1 = cv2.imread('1.jpg')
image2 = cv2.imread('2.jpg')

# Convert images to grayscale
image1_gray = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
image2_gray = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)

# Compute SSIM between two images
(score, diff) = compare_ssim(image1_gray, image2_gray, full=True)
# The diff image contains the actual image differences between the two images
# and is represented as a floating point data type in the range [0,1] 
# so we must convert the array to 8-bit unsigned integers in the range
# [0,255] before we can use it with OpenCV
diff = (diff * 255).astype("uint8")

cv2.imshow('diff',diff)
cv2.waitKey()

注:您的两个输入图像并不完全相同,它们略有偏移,因此SSIM会拾取偏移的像素

© www.soinside.com 2019 - 2024. All rights reserved.