07OpenCV 圖像模糊

文章目錄

  • 圖像掩膜操作
  • 模糊原理
  • 均值濾波
  • 高斯濾波
  • 中值濾波
  • 雙邊濾波
  • 算子
  • 代碼

圖像掩膜操作

圖像掩膜操作

模糊原理

  • Smooth/Blur是圖像處理中最簡單和常用的操作之一
    使用操作的原因之一就是為了給圖像預處理時候減低噪聲

    圖像噪聲是指存在于圖像數據中的不必要的或多余的干擾信息

  • Smooth/Blur操作原理是數學的卷積運算,根據不同卷積運算公式,劃分了多種圖像濾波方式
    圖像濾波:指的是在盡量保留圖像特征的條件下對目標圖像得噪聲進行抑制

均值濾波

均值模糊無法克服邊緣像素信息丟失缺陷。原因是均值濾波是基于平均權重

在這里插入圖片描述
6x6像素表中,3x3的卷積算子從圖一所示的紅色像素開始卷積,依次從左至右,從上至下。取黃色像素值之和的平均值賦給紅色像素,則紅色像素為卷積之后的新像素。由此每次移動一個像素。顯然,計算平均值時,取值范圍越大,"模糊效果"越強烈。

高斯濾波

高斯模糊部分克服了該缺陷,但是無法完全避免,因為沒有考慮像素值的不同

一階高斯算子
在這里插入圖片描述> 二階高斯算子
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
這9個點的權重總和等于0.4787147,如果只計算這9個點的加權平均,還必須讓它們的權重之和等于1,因此上面9個值還要分別除以0.4787147,得到最終的權重矩陣.
在這里插入圖片描述在這里插入圖片描述在這里插入圖片描述
將這9個值加起來,就是中心點的高斯模糊的值。
對所有點重復這個過程,就得到了高斯模糊后的圖像。如果原圖是彩色圖片,可以對RGB三個通道分別做高斯模糊。

中值濾波

去除椒鹽噪聲
在這里插入圖片描述

雙邊濾波

高斯雙邊模糊 – 是邊緣保留的濾波方法,避免了邊緣信息丟失,保留了圖像輪廓不變

雙邊濾波就是經典的常用的能夠保留圖像邊緣信息的濾波算法之一。雙邊濾波是一種綜合考慮濾波器內圖像空域信息和濾波器內圖像像素灰度值相似性的濾波算法,可以實現在保留區域信息的基礎上實現對噪聲的去除、對局部邊緣的平滑。雙邊濾波對高頻率的波動信號起到平滑的作用,同時保留大幅值的信號波動,進而實現對保留圖像中邊緣信息的作用。雙邊濾波器是兩個濾波器的結合,分別考慮空域信息和值域信息,使得濾波器對邊緣附近的像素進行濾波時,距離邊緣較遠的像素值不會對邊緣上的像素值影響太多,進而保留了邊緣的清晰性。
在這里插入圖片描述
空域核:在窗口內每個位置都有權重(即每個位置的像素都考慮)。
在這里插入圖片描述
i,j 為模板窗口的其他系數的坐標;

k,l為模板窗口的中心坐標點;

σ為高斯函數的標準差。

w空間域核由像素位置歐式距離決定的模板權值

值域核:一定像素差范圍進行局部模糊,像素值高的在高的部分模糊,低的在低的那部分模糊,保留了邊緣區分
在這里插入圖片描述
i ,j為模板窗口的其他系數的坐標,

f(i,j)表示圖像在點i,j處的像素值;

k,l為模板窗口的中心坐標點,對應的像素值為f(k,l)

σ為高斯函數的標準差。

w值域核是由像素值的差值決定的模板權值

雙邊濾波器的模板權值
在這里插入圖片描述雙邊濾波器的數據公式
在這里插入圖片描述 空域權重衡量的是 p,q兩點之間的距離,距離越遠權重越低
值域權重衡量的是 p,q兩點之間的像素值相似程度,越相似權重越大

算子

blur 算子

void blur( InputArray src, OutputArray dst,Size ksize, Point anchor = Point(-1,-1),int borderType = BORDER_DEFAULT );
/*******************************************************************
*			src: 					輸入圖像
*			dst:					輸出圖像
*			ksize:					內核大小
*			anchor:				 	 錨點
*						默認Point(-1,-1):錨點在核中心
*			borderType:				 外部像素邊界模式(一般不管)	   
*********************************************************************/

高斯算子

void GaussianBlur( InputArray src, OutputArray dst, Size ksize,double sigmaX, double sigmaY = 0,int borderType = BORDER_DEFAULT );
/*******************************************************************
*			src: 					輸入圖像
*			dst:					輸出圖像
*			ksize:					內核大小
*					x,y必須是整數,并且為奇數
*			sigmaX:				 	 X方向濾波系數
*			sigmaY:				     Y方向濾波系數
*			borderType:				 外部像素邊界模式(一般不管)	   
*********************************************************************/

中值濾波

void medianBlur( InputArray src, OutputArray dst, int ksize );
/*******************************************************************
*			src: 					輸入圖像
*			dst:					輸出圖像
*			ksize:					內核大小
*				      大小必須是大于1而且必須是奇數
*********************************************************************/

雙邊濾波

void bilateralFilter( InputArray src, OutputArray dst, int d,double sigmaColor, double sigmaSpace,int borderType = BORDER_DEFAULT );
/*******************************************************************
*			src: 					輸入圖像
*			dst:					輸出圖像
*			d:						濾波過程中每個像素鄰域的直徑
*			sigmaColor:				 顏色空間濾波器的標準差值
*					參數越大表明該像素領域內有越多的顏色被混合到一起
*			sigmaSpace:				 空間間坐標中濾波器的標準差值
*			borderType:				 外部像素邊界模式(一般不管)	   
*********************************************************************/

代碼

#include <iostream>
#include <string>
#include <map>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
class Blur 
{
public:Blur() :img(imread("test.jpg")) {result["原圖"] = img;}void BlurByblur() {blur(img, result["blur"], Size(9, 9));}void BlurByGaussianBlur() {GaussianBlur(img, result["GaussianBlur"], Size(9, 9), 9, 9);}void BlurBymedianBlur() {medianBlur(img, result["medianBlur"], 9);}void BlurBybilateralFilter() {bilateralFilter(img, result["bilateralFilter"], 9, 9, 9);}void Show(){for (auto& v : result) {imshow(v.first, v.second);}waitKey(0);}
private:Mat img;map<string, Mat> result;
};
int main() 
{Blur* p = new Blur;p->BlurByblur();p->BlurByGaussianBlur();p->BlurBymedianBlur();p->BlurBybilateralFilter();p->Show();return 0;
}

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718191.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718191.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718191.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RK3568開發筆記-qt程序運行報錯Failed to move cursor on screen

目錄 前言 一、qt程序運行報錯 二、異常解決 總結 前言 最近在進行 RK3568 平臺上的 Qt 程序開發時&

使用 Docker 部署 MrDoc 在線文檔管理系統

1&#xff09;MrDoc 介紹 MrDoc 簡介 MrDoc 覓思文檔&#xff1a;https://mrdoc.pro/ MrDoc 使用手冊&#xff1a;https://doc.mrdoc.pro/p/user-guide/ MrDoc 可以創建各類私有化部署的文檔應用。你可以使用它進行知識管理、構建團隊文庫、制作產品手冊以及在線教程等。 Mr…

在Java中如何使用Lambda表達式進行函數式編程

在Java中如何使用Lambda表達式進行函數式編程 在Java中&#xff0c;使用Lambda表達式進行函數式編程主要涉及以下幾個步驟&#xff1a; 理解函數式接口&#xff1a; 函數式接口是一個只有一個抽象方法的接口。Java 8引入了FunctionalInterface注解&#xff0c;用于標記這樣的接…

linux安全--DNS欺騙,釣魚網站搭建

目錄 一&#xff0c;實驗準備 首先讓client能上網 1&#xff09;實現全網互通&#xff0c;實現全網互通過程請看 2&#xff09;SNAT源地址轉換 3&#xff09;部署DHCP服務 4)配置DHCP服務 5&#xff09;啟動服務 6&#xff09;安裝DNS服務 7&#xff09;DNS配置 8)啟動DNS…

【Python筆記-設計模式】策略模式

一、說明 策略模式是一種行為設計模式&#xff0c;它定義了一系列算法&#xff0c;將每個算法封裝起來&#xff0c;并使它們可以互相替換。 (一) 解決問題 在需要根據不同情況選擇不同算法或策略&#xff0c;規避不斷開發新需求后&#xff0c;代碼變得非常臃腫難以維護管理。…

如何將圖片保存成視頻(imageio、opencv和ffmpeg)

測試下來發現&#xff0c;imageio 速度比 cv2 的要慢&#xff0c;所以普通保存推薦 cv2&#xff0c;要gpu加速需要額外配置或者修改 imageio 底層也是調用的ffmpeg&#xff0c;以下是python代碼 import imageio import os# 讀取要保存為視頻的圖片 images [] for filename …

UE 打包窗口及鼠標狀態設置

UE 打包窗口及鼠標狀態設置 打包后鼠標不鎖定 顯示鼠標圖標 打包后設置窗口模式 找到打包路徑下的配置文件GameUserSettings&#xff0c;設置相關項目 FullscreenMode0表示全屏模式&#xff0c;1表示窗口全屏模式&#xff0c;2表示窗口模式

模型部署 - BevFusion - (1) - 思路總結

模型部署實踐 - BevFusion 思路總結一、網絡結構 - 總結1.1、代碼1.2、網絡流程圖1.3、模塊大致梳理 二、Onnx 的導出 -總體思路分析三、優化思路總結 學習 BevFusion 的部署&#xff0c;看了很多的資料&#xff0c;這篇博客進行總結和記錄自己的實踐 思路總結 對于一個模型我…

【代碼】Android|獲取壓力傳感器、屏幕壓感數據(大氣壓、原生和Processing)

首先需要分清自己需要的是大氣壓還是觸摸壓力&#xff0c;如果是大氣壓那么就是TYPE_PRESSURE&#xff0c;可以參考https://source.android.google.cn/docs/core/interaction/sensors/sensor-types?hlzh-cn。如果是觸摸壓力就是另一回事&#xff0c;我需要的是觸摸壓力。 不過…

軟考 系統分析師系列知識點之系統分析的任務、難點與要求(1)

所屬章節&#xff1a; 第10章. 系統分析 第1節. 系統分析概述 系統分析階段也稱為邏輯設計階段&#xff0c;其任務是根據系統設計書所確定的范圍&#xff0c;對現有系統進行詳細設計調查&#xff0c;描述現有系統的業務流程&#xff0c;指出現有系統的局限性和不足之處&#x…

Qt+libhv實現各類網絡通信方式(TCP-UDP-HTTP-WebSocket)

文章目錄 TCP通信服務端客戶端UDP通信服務端客戶端HTTP通信服務端客戶端WebSocket通信服務端客戶端參考項目下載為了實現程序的跨進程和跨主機通信,我們通常會采用網絡通信進行數據傳輸。常用的通信方式包括TCP/UDP、HTTP、WebSocket等,這些網絡通信方式各有優劣有的是短連接…

事故預測 | Matlab基于FuzzySVR模糊支持向量機多特征變量事故預測

事故預測 | Matlab基于FuzzySVR模糊支持向量機多特征變量事故預測 目錄 事故預測 | Matlab基于FuzzySVR模糊支持向量機多特征變量事故預測預測效果基本描述程序設計參考資料 預測效果 基本描述 Matlab基于FuzzySVR模糊支持向量機多特征變量事故預測 運行環境: Matlab2023及以 上…

C++經典日期類實現

學完C類和對象以及四個默認成員函數&#xff0c;就可以來嘗試自己實現一下日期類。完成日期類的各種功能&#xff0c;并加強自己的代碼能力。 日期類實現 定義一個日期類 // 文件:Date.h #pragma once #include <iostream> using std::cout; using std::endl;//定義日…

C語言數組作為函數參數

有兩種情形&#xff1b; 一種是數組元素作為函數實參&#xff1b;一種是數組名作為函數參數&#xff1b; 新建一個VC6單文檔工程&#xff1b; void printshz(int , CDC* , int , int ); double getav(int a[5]); ...... void CShzcshView::OnDraw(CDC* pDC) {CShzcshDoc* pDo…

Pthon圖像處理Opencv初步:色彩轉換、打開攝像頭

文章目錄 處理流程顏色空間二值圖像攝像頭 python圖像處理教程&#xff1a;初步&#x1f4f7;插值變換&#x1f4f7;形態學處理&#x1f4f7;濾波 處理流程 opencv是跨平臺圖像處理庫&#xff0c;為許多編程語言提供了接口&#xff0c;Python自然在列&#xff0c;但在使用pip…

32單片機基礎:PWM驅動舵機,直流電機

PWM驅動舵機 接線圖如上圖所示。注意&#xff0c;舵機的5V 線不能接到面包板上的正極&#xff0c;面包板上的正極只有3.3V,是STM32提供的&#xff0c;所以要接到STLINK的5V, 我們如何驅動舵機呢&#xff1f;由之前我們介紹原理知道&#xff0c;要輸出如下圖對應的PWM波形才行…

AWTK 開源串口屏開發(11) - 天氣預報

# AWTK 開源串口屏開發 - 天氣預報 天氣預報是一個很常用的功能&#xff0c;在很多設備上都有這個功能。實現天氣預報的功能&#xff0c;不能說很難但是也絕不簡單&#xff0c;首先需要從網上獲取數據&#xff0c;再解析數據&#xff0c;最后更新到界面上。 在 AWTK 串口屏中…

數字革命的浪潮:Web3如何改變一切

隨著數字技術的不斷發展&#xff0c;人類社會正迎來一場前所未有的數字革命浪潮。在這個浪潮中&#xff0c;Web3技術以其去中心化、安全、透明的特性&#xff0c;正在逐漸改變著我們的生活方式、商業模式以及社會結構。本文將深入探討Web3技術如何改變一切&#xff0c;以及其所…

volatile關鍵字的作用 以及 單例模式(餓漢模式與懶漢模式的區別及改進)

文章目錄 &#x1f4a1;volatile保證內存可見性&#x1f4a1;單例模式&#x1f4a1;餓漢模式&#x1f4a1;懶漢模式&#x1f4a1;懶漢模式多線程版&#x1f4a1;volatile防止指令重排序 &#x1f4a1;volatile保證內存可見性 Volatile 修飾的變量能夠保證“內存可見性”以及防…

解決連接工具Mobaxterm連接錯誤Connection timed out----VMware里Linux端口號固定

錯誤&#xff1a;Connection timed out 原因&#xff1a; 沒有固定ip&#xff0c;網絡斷開&#xff0c;再次連接就是新的IP 解決&#xff1a; 再次測試連接&#xff0c;彈出這個就代表成功了