Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >朴素滤波返回错误图像

朴素滤波返回错误图像
EN

Stack Overflow用户
提问于 2017-04-30 14:05:40
回答 1查看 55关注 0票数 0

我试图用OpenCV来实现像SCHAR、SOBEL或PREWITT这样的过程梯度滤波器的卷积算法。OpenCV已经有了非常高效的功能,但是他们没有在“一步”中计算执政官。

例如,对于sobel滤波器,它必须按“三个步骤”处理。1) x轴上的Sobel (Sx) 2) y轴上的Sobel (Sy) 3)缔合(frequently 0.5 * sqrt(Sx^2 * Sy^2) )

我写了一个天真的算法来做它,但它返回一个黑色的图像,我真的不明白为什么。

代码语言:javascript
运行
AI代码解释
复制
cv::Mat kt = (cv::Mat1f(3,3)<<1,2,1,0,0,0,-1,-2,-1);
cv::Mat kt2 = kt.t();



  cv::Mat img = cv::imread("Lena.png", cv::IMREAD_GRAYSCALE);


img.convertTo(img, CV_32F);

// Extand the borders in order to simplify the border management.
cv::copyMakeBorder(img, img, 1,1,1,1, cv::BORDER_ISOLATED, cv::Scalar::all(0.));

// Get a sub region of the same size as the original image from the first row first column WITHOUT copy :) 
img = img(cv::Rect(1,1, img.cols-1, img.rows-1));

for(int r=0;r<img.rows;r++)
    for(int c=0;c<img.cols;c++)
    {
        float dx = 0.f;
        float dy = 0.f;

        for(int kr = -1; kr<=1;kr++)
            for(int kc = -1; kc<=1;kc++)
            {
                float value = img.at<float>(r+kr,c+kc);

                dx += 0.25f * value * kt.at<float>(kr+1, kc+1);
                dy += 0.25f * value * kt2.at<float>(kr+1, kc+1);
            }

        img.at<float>(r,c) = std::hypot(dx,dy); // sqrt(dx^2 + dy^2)
    }

其结果主要是一幅nan图像。我并不是很清楚为什么。提前感谢您的帮助。

注意,Schar,Sobel,和Prewitt的滤波器是可分离的滤波器。在那个算法中,我没有使用那个属性,因为我是相互关联的,以理解这个简单算法的问题所在。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-12 06:26:19

正如“小猪”所指出的,我的问题终于很简单了。我正在努力把输出写在正在处理的图像中。因为处理涉及到邻域,它也会影响输出。解决这一问题的一个方法就是将处理结果写在与我正在处理的图像不同的图像中。

代码语言:javascript
运行
AI代码解释
复制
cv::Mat kt = (cv::Mat1f(3,3)<<1,2,1,0,0,0,-1,-2,-1);
cv::Mat kt2 = kt.t();



  cv::Mat img = cv::imread("Lena.png", cv::IMREAD_GRAYSCALE);
  cv::Mat img2 = cv::Mat::zeros(img.size(),CV_32F);

img.convertTo(img, CV_32F);

// Extand the borders in order to simplify the border management.
cv::copyMakeBorder(img, img, 1,1,1,1, cv::BORDER_ISOLATED, cv::Scalar::all(0.));

// Get a sub region of the same size as the original image from the first row first column WITHOUT copy :) 
img = img(cv::Rect(1,1, img.cols-1, img.rows-1));

for(int r=0;r<img.rows;r++)
    for(int c=0;c<img.cols;c++)
    {
        float dx = 0.f;
        float dy = 0.f;

        for(int kr = -1; kr<=1;kr++)
            for(int kc = -1; kc<=1;kc++)
            {
                float value = img.at<float>(r+kr,c+kc);

                dx += 0.25f * value * kt.at<float>(kr+1, kc+1);
                dy += 0.25f * value * kt2.at<float>(kr+1, kc+1);
            }

        img2.at<float>(r,c) = std::hypot(dx,dy); // sqrt(dx^2 + dy^2)
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43711837

复制
相关文章
图像处理-图像滤波
加性噪声一般指热噪声、散弹噪声等,它们与信号的关系是相加,不管有没有信号,噪声都存在。
AomanHao
2022/01/14
5.8K0
图像与滤波
我对图像处理一直很感兴趣,曾经写过好几篇博客(1,2,3,4)。 前几天读到一篇文章,它提到图像其实是一种波,可以用波的算法处理图像。我顿时有一种醍醐灌顶的感觉,从没想到这两个领域是相关的,图像还可以
ruanyf
2018/04/13
9140
图像与滤波
图像与滤波
像素:一张图片在不停的放大到再也无法放大的时候,呈现在我们眼前的是一个个小的颜色块,这种带有颜色的小方块就可以被称为像素
雪月清
2020/06/23
1K0
[Python图像处理] 四.图像平滑之均值滤波、方框滤波、高斯滤波、中值滤波及双边滤波
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类、目标检测应用。
Eastmount
2021/12/02
6.9K0
[Python图像处理] 四.图像平滑之均值滤波、方框滤波、高斯滤波、中值滤波及双边滤波
OpenCV图像处理(十三)---图像滤波
热力学第一定律(the first law of thermodynamics)就是不同形式的能量在传递与转换过程中守恒的定律,表达式为△U=Q+W。表述形式:热量可以从一个物体传递到另一个物体,也可以与机械能或其他能量互相转换,但是在转换过程中,能量的总值保持不变。其推广和本质就是著名的能量守恒定律。
用户5410712
2022/06/01
5010
OpenCV图像处理(十三)---图像滤波
图像滤波算法总结[通俗易懂]
该篇主要是对图像滤波算法一个整理 1:图像滤波既可以在实域进行,也可以在频域进行。图像滤波可以更改或者增强图像。通过滤波,可以强调一些特征或者去除图像中一些不需要的部分。滤波是一个邻域操作算子,利用给定像素周围的像素的值决定此像素的最终的输出值。 图像滤波可以通过公式: O(i,j)=∑m,nI(i+m,j+n)∗K(m,n) O ( i , j ) = ∑ m , n I ( i + m , j + n ) ∗ K ( m , n ) O(i,j) = \sum_{m,n}^{ }I(i+m,j+n)*K(m,n) 其中K为滤波器,在很多文献中也称之为核(kernel)。常见的应用包括去噪、图像增强、检测边缘、检测角点、模板匹配等。
全栈程序员站长
2022/06/29
2.1K0
图像滤波算法总结[通俗易懂]
图像的卷积(滤波)运算(二)——高斯滤波
在图像处理中,选定X方向上长度为3的窗口,令δ=1,中心坐标为1,由上述公式,其卷积核(Xa,X,Xb)可以如下计算:
charlee44
2019/08/13
2K0
图像各向异性滤波
各向异性概念 各向异性(英文名称:anisotropy)是指材料在各方向的力学和物理性能呈现差异的特性。晶体的各向异性即沿晶格的不同方向,原子排列的周期性和疏密程度不尽相同,由此导致晶体在不同方向的物理化学特性也不同,这就是晶体的各向异性。亦称“非均质性”。物体的全部或部分物理、化学等性质随方向的不同而各自表现出一定的差异的特性。即在不同的方向所测得的性能数值不同。对图像来说各向异性就是在每个像素点周围四个方向上梯度变化都不一样,滤波的时候我们要考虑图像的各向异性对图像的影响,而各向同性显然是说各个方向的
OpenCV学堂
2018/04/04
2.4K0
图像各向异性滤波
[Python图像处理] 四.图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波「建议收藏」
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。希望文章对您有所帮助,如果有不足之处,还请海涵~
全栈程序员站长
2022/11/04
6920
Task04 图像滤波
图像的实质是一种二维信号,滤波是信号处理中的一个重要概念。在图像处理中,滤波是一种非常常见的技术,它们的原理非常简单,但是其思想却十分值得借鉴,滤波是很多图像算法的前置步骤或基础,掌握图像滤波对理解卷积神经网络也有一定帮助。
致Great
2020/04/30
7040
图像处理基础-均值滤波
图像处理中,有几种常见的基础算法,比如“模糊”、“灰度”、“浮雕”、“黑白”、“底片”、“锐化”。这篇文章讲述采用“均值滤波”的算法实现“模糊”。
公号sumsmile
2020/10/29
1.5K0
图像处理基础-均值滤波
图像的卷积(滤波)运算(一)——图像梯度
首先要明确的一点是图像的卷积/滤波运算,是针对原图像每一个像素进行处理,得到一个新的图像的过程。那么进行怎么样的运算呢?要知道图像能够被人所识别,是因为图像中每个像素并不完全是离散而独立的,每个像素都跟周围的像素相关。因此,对每一个像素,选定其周围一定范围内的像素值进行运算,得到新的图像的像素值也一定是相关的。而这个范围,就是卷积/滤波的窗口。
charlee44
2019/08/13
1.9K0
Matlab图像处理之均值滤波
由于成像系统、传输介质和记录设备等的不完善,数字图像在其形成、传输记录过程中往往会受到多种噪声的污染。 图像的空间域滤波属于空间运算方法,例如中值滤波、均值滤波,用途主要是降噪。 今天写的Matlab代码为均值滤波 源代码:
FPGA开源工作室
2019/10/29
2K0
Matlab图像处理之均值滤波
Python图像处理:频域滤波降噪和图像增强
来源:DeepHub IMBA本文约4300字,建议阅读8分钟本文将讨论图像从FFT到逆FFT的频率变换所涉及的各个阶段,并结合FFT位移和逆FFT位移的使用。 图像处理已经成为我们日常生活中不可或缺的一部分,涉及到社交媒体和医学成像等各个领域。通过数码相机或卫星照片和医学扫描等其他来源获得的图像可能需要预处理以消除或增强噪声。频域滤波是一种可行的解决方案,它可以在增强图像锐化的同时消除噪声。 快速傅里叶变换(FFT)是一种将图像从空间域变换到频率域的数学技术,是图像处理中进行频率变换的关键工具。通过利用图
数据派THU
2023/04/08
1K0
Python图像处理:频域滤波降噪和图像增强
opencv 4 -- 图像平滑与滤波
这是由一个归一化卷积框完成的。 他只是用卷积框覆盖区域所有像素的平 均值来代替中心元素
wust小吴
2019/07/08
7360
[转载]图像与滤波-阮一峰
我们知道,图像由像素组成。下图是一张 400 x 400 的图片,一共包含了 16 万个像素点。
marsggbo
2018/12/27
8880
图像处理: 设计 动态高斯滤波
在做项目的过程中,我发现如果根据 像素点 相对整张图片 的位置 设计 不同的 滤波核大小(即参数 ksize),就可以灵活地对整张图片实现 动态 高斯滤波 了。
JNingWei
2018/09/27
6340
图像处理: 设计 动态高斯滤波
图像的滤波与图像增强的Matlab实现
在数字图像处理中,常常会遇到图像中混杂有许多的噪声。因此,在进行图像处理中,有时要先进行祛除噪声的工作。最常用的祛除噪声的方法是用滤波器进行滤波处理。MATLAB 的图像处理工具箱里也设计了许多的滤波器。如均值滤波器、中值滤波器、维纳滤波器等。
timerring
2023/03/07
5070
OpenCV中图像频率域滤波
图像处理不仅可以在空间域进行还可以在频率域进行,把空间域的图像开窗卷积形式,变换得到频率域的矩阵点乘形式得到比较好的效果。转换到频率域最常见的是通过傅里叶变换得到图像的频率域表示,处理之后再反变换回去。支持各种卷积处理的效果,比如模糊,梯度提取等,OpenCV中支持傅里叶变换与逆变换的函数分别为
OpenCV学堂
2019/07/23
1.9K1
OpenCV中图像频率域滤波
详解图像滤波原理及实现!
图像的实质是一种二维信号,滤波是信号处理中的一个重要概念。在图像处理中,滤波是一常见的技术,它们的原理非常简单,但是其思想却十分值得借鉴,滤波是很多图像算法的前置步骤或基础,掌握图像滤波对理解卷积神经网络也有一定帮助。
Datawhale
2020/07/02
4.7K0
详解图像滤波原理及实现!

相似问题

Haskell朴素重复滤波

20

朴素指针算法合并排序返回错误

13

Matlab反褶积的朴素逆滤波器与维纳滤波器的比较

11

滤波器返回错误结果

10

图像滤波

35
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档