gpt4 book ai didi

image - 如何将 cv2.addWeighted 和 cv2.GaussianBlur 转换成 MATLAB?

转载 作者:太空宇宙 更新时间:2023-11-03 19:59:05 24 4
gpt4 key购买 nike

我有这段 Python 代码:

cv2.addWeighted(src1, 4, cv2.GaussianBlur(src1, (0, 0), 10), src2, -4, 128) 

如何将其转换为 Matlab?到目前为止,我得到了这个:

f = imread0('X.jpg'); 
g = imfilter(f, fspecial('gaussian',[size(f,1),size(f,2)],10));
alpha = 4;
beta = -4;
f1 = f*alpha+g*beta+128;

我想减去局部平均彩色图像。

输入图片:

混合 OpenCV 的输出:

最佳答案

cv2.addWeighted 的文档具有这样的定义:

cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]]) → dst

此外,对输出图像执行的操作如下:


(来源:opencv.org)

因此,您的代码所做的是完全正确的……至少对于 cv2.addWeighted 而言。您采用 alpha,将其乘以第一张图像,然后将其乘以 beta,将其乘以第二张图像,然后在其上添加 gamma。唯一需要处理的复杂问题是 saturate,这意味着任何超出您正在处理的数据类型的动态范围的值,您都可以将其限制在那个范围内。因为结果中有可能出现负数,saturate 选项只是意味着使任何负值 0 和任何大于最大预期值的值到那个最大值在这种情况下,您需要使任何大于 1 的值都等于 1。因此,通过 im2double 将图像转换为 double 是个好主意。因为您希望允许首先发生超出动态范围的值的加减,然后您在之后饱和。通过使用图像的默认图像精度(即 uint8),饱和甚至会在 saturate 操作发生之前发生,这会给您带来错误的结果。因为您正在进行此double 转换,所以您需要将 gamma 的 128 加法转换为 0.5 以进行补偿。

现在,唯一的小问题是高斯模糊。 Looking at the documentation ,通过执行 cv2.GaussianBlur(src1, (0, 0), 10),您告诉 OpenCV 在标准差为 10 时推断掩码大小。MATLAB 不会推断掩码的大小面具给你,所以你需要自己做。一种常见的做法是简单地找到标准偏差的六倍,取 floor 并加 1。这适用于掩码的水平和垂直维度。您可以在此处查看我关于为什么这是常见做法的理由的帖子:By which measures should I set the size of my Gaussian filter in MATLAB?

因此,在 MATLAB 中,您将改为使用高斯模糊来执行此操作。顺便说一句,它只是imread,而不是imread0:

f = im2double(imread('http://i.stack.imgur.com/kl3Md.jpg')); %// Change - Reading image directly from StackOverflow
sigma = 10; %// Change
sz = 1 + floor(6*sigma); %// Change
g = imfilter(f, fspecial('gaussian', sz, sigma)); %// Change

%// Rest of the code is the same
alpha = 4;
beta = -4;
f1 = f*alpha+g*beta+0.5; %// Change

%// Saturate
f1(f1 > 1) = 1;
f1(f1 < 0) = 0;

我得到这张图片:

enter image description here

请注意,这在 MATLAB 中的 OpenCV 之间出现的方式略有不同……尤其是眼睛周围的虚化。这是因为 OpenCV 在推断高斯模糊的掩码大小时做了一些不同的事情。我不确定这是怎么回事,但是我如何通过查看标准差来指定掩码大小是最常见的启发式方法之一。尝试使用标准偏差,直到得到您喜欢的结果。

关于image - 如何将 cv2.addWeighted 和 cv2.GaussianBlur 转换成 MATLAB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33832728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com