opencv:卷積涉及的基礎概念,Sobel邊緣檢測代碼實現及Same(相同)填充與Vaild(有效)填充

濾波

線性濾波可以說是圖像處理最基本的方法,它可以允許我們對圖像進行處理,產生很多不同的效果。
在這里插入圖片描述

卷積

卷積的概念:

卷積的原理與濾波類似。但是卷積卻有著細小的差別。 卷積操作也是卷積核與圖像對應位置的乘積和。但是卷積操作在做乘積之前,需要先 將卷積核翻轉180度,之后再做乘積。

卷積的數學定義:
在這里插入圖片描述
一般稱為g為作用在f上的filter或kernel

卷積解決的問題:
卷積負責提取圖像中的局部特征

對于濾波器,也有一定的規則要求:
1)濾波器的大小應該是奇數,這樣它才有一個中心,例如3x3,5x5或者7x7。有中心了,也有 了半徑的稱呼,例如5x5大小的核的半徑就是2。
2)濾波器矩陣所有的元素之和應該要等于1,這是為了保證濾波前后圖像的亮度保持不變。但 這不是硬性要求。
3)如果濾波器矩陣所有元素之和大于1,那么濾波后的圖像就會比原圖像更亮,反之,如果小 于1,那么得到的圖像就會變暗。如果和為0,圖像不會變黑,但也會非常暗。
4)對于濾波后的結構,可能會出現負數或者大于255的數值。對這種情況,我們將他們直接截 斷到0和255之間即可。對于負數,也可以取絕對值。

卷積的應用:

第一種卷積:
一個沒有任何效果的卷積
在這里插入圖片描述
將原像素中間像素值乘1,其余全部乘0。 顯然像素值不會發生任何變化。

第二種卷積:
平滑均值濾波

取九個值的平均值代替中間像素值 — 起到平滑的效果。
在這里插入圖片描述

第三種卷積:
高斯平滑

高斯平滑水平和垂直方向呈現高斯分布,更突出了 中心點在像素平滑后的權重,相比于均值濾波而言, 有著更好的平滑效果。
在這里插入圖片描述

第四種卷積:
圖像銳化

圖像銳化使用的是拉普拉斯變換核函數
在這里插入圖片描述

第五種卷積:
邊界提取的卷積:

用Gx來卷積下面這張圖的話,就會在黑白邊界獲得比較大的值。在這里插入圖片描述
手動計算可以發現Gx對橫向邊界會有很大的像素值,Gy是對縱向邊界有很大的像素值,從而實現邊界提取。

第六種卷積:
Sobel邊緣檢測:

Sobel更強調了和邊緣相鄰的像素點 對邊緣的影響。
(不僅僅考慮橫向和縱向的邊界提取,其他方向的邊界也會得到)
在這里插入圖片描述
在這里插入圖片描述

代碼實現:

import cv2
import numpy as npimg = cv2.imread("lenna.png", 0)'''
Sobel函數求完導數后會有負值,還有會大于255的值。
而原圖像是uint8,即8位無符號數(范圍在[0,255]),所以Sobel建立的圖像位數不夠,會有截斷。
因此要使用16位有符號的數據類型,即cv2.CV_16S。
''' 
x = cv2.Sobel(img, cv2.CV_16S, 1, 0)
y = cv2.Sobel(img, cv2.CV_16S, 0, 1)'''
在經過處理后,別忘了用convertScaleAbs()函數將其轉回原來的uint8形式。
否則將無法顯示圖像,而只是一副灰色的窗口。
dst = cv2.convertScaleAbs(src[, dst[, alpha[, beta]]])  
其中可選參數alpha是伸縮系數,beta是加到結果上的一個值。結果返回uint8類型的圖片。
'''absX = cv2.convertScaleAbs(x)
absY = cv2.convertScaleAbs(y)'''
由于Sobel算子是在兩個方向計算的,最后還需要用cv2.addWeighted(...)函數將其組合起來
。其函數原型為:
dst = cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])  
其中alpha是第一幅圖片中元素的權重,beta是第二個的權重,
gamma是加到最后結果上的一個值。
'''dst = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)cv2.imshow("absX", absX)
cv2.imshow("absY", absY)cv2.imshow("Result", dst)cv2.waitKey(0)
cv2.destroyAllWindows()

實現結果:

豎向:
在這里插入圖片描述
橫向:
在這里插入圖片描述
總和結果:
在這里插入圖片描述
對比圖中橫向和縱向的女生嘴唇可以明顯看出來,橫向和縱向的提取效果

步長/Stride

如果用(f, f)的過濾器來卷積一張(h, w)大小的圖片,每次移動一個像素的話,那么得出的結果 就是(h-f+1, w-f+1)的輸出結果。f是過濾器大小,h和w分別是圖片的高寬。 如果每次不止移動一個像素,而是s個像素,那么結果就會變為:在這里插入圖片描述
這個s就叫做步長。
通俗來講,就是卷積核移動的一步的大小。

存在的問題:
? 只要是f或s的值比1要大的話,那么每次卷積之后結果的長寬,要比卷積前小一些。(比如說[5×5]的矩陣,在經過[3×3]的卷積核后的結果是[3×3],比原先[5×5]的矩陣要小)
? 丟失信息

填充/Pading

在這里插入圖片描述
填充就是在原矩陣外邊添加一圈或多圈全0的值。
主要用來保證卷積核輸出的格式。比如說:[5×5]的矩陣,在經過[3×3]的卷積核后的結果是[3×3],我們要是像得到還是[5×5]的矩陣,就需要將原[5×5]的矩陣填充為[7×7]的矩陣,這樣卷積后的結果就是[5×5]的矩陣了

Same(相同)填充:
在這里插入圖片描述
Vaild(有效)填充:
在這里插入圖片描述
是分數怎么辦?一般的處理是,只取整數部分。
而這種p=0,然后結果取整數部分的處理方式,叫做Valid(有效)填充

Same(相同)填充和Vaild(有效)填充的區別:

SAME進行填充,,當滑動卷積核之后,若多出一列,“Same”發現余下的窗口不到卷積核大小并不會把多出的一列丟棄,但是只有一列了不夠卷積核大小怎么辦?填充!會在原圖像外圍添加一圈或者多圈全“0”(圖片卷積后可能不會變小。)
在這里插入圖片描述
VALID不進行填充,當滑動卷積核之后,若多出一列,“Vaild”發現余下的窗口不到卷積核大小,會就把剩下的一列直接去了(圖片卷積后還是會變小。)
在這里插入圖片描述

其中:W為輸入的size,F為filter的size,S為步長

此處參考了網絡 wuzqchom的博客
TensorFlow中CNN的兩種padding方式“SAME”和“VALID”

卷積的擴展:3通道卷積

在這里插入圖片描述

卷積核的確定:

CNN厲害的地方在于, 過濾器的特征并不是人為設定的,而是通過大量圖片自己訓練出來的。

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

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

相關文章

機器學習股票_使用概率機器學習來改善您的股票交易

機器學習股票Note from Towards Data Science’s editors: While we allow independent authors to publish articles in accordance with our rules and guidelines, we do not endorse each author’s contribution. You should not rely on an author’s works without seek…

BZOJ 2818 Gcd

傳送門 題解&#xff1a;設p為素數 &#xff0c;則gcd(x/p,y/p)1也就是說求 x&#xff0f;p以及 y&#xff0f;p的歐拉函數。歐拉篩前綴和就可以解決 #include <iostream> #include <cstdio> #include <cmath> #include <algorithm> #include <map&…

LeetCode387-字符串中的第一個唯一字符(查找,自定義數據結構)

一開始想用HashMap&#xff0c;把每個字符放進去&#xff0c;然后統計出現的次數。 使用LinkedHashMap的話&#xff0c;鍵值對的順序都是不會變的。 LinkedHashMap<Character,Integer> map new LinkedHashMap<>();map.put(i,1111);map.put(j,2222);map.put(k,3333…

r psm傾向性匹配_南瓜香料指標psm如何規劃季節性廣告

r psm傾向性匹配Retail managers have been facing an extraordinary time with the COVID-19 pandemic. But the typical plans to prepare for seasonal sales will be a new challenge. More seasonal products have been introduced over the years, making August the bes…

主成分分析:PCA的思想及鳶尾花實例實現

主成份分析算法PCA 非監督學習算法 PCA的實現&#xff1a; 簡單來說&#xff0c;就是將數據從原始的空間中轉換到新的特征空間中&#xff0c;例如原始的空間是三維的(x,y,z)&#xff0c;x、y、z分別是原始空間的三個基&#xff0c;我們可以通過某種方法&#xff0c;用新的坐…

兩家大型網貸平臺竟在借款人審核問題上“偷懶”?

python信用評分卡&#xff08;附代碼&#xff0c;博主錄制&#xff09; https://study.163.com/course/introduction.htm?courseId1005214003&utm_campaigncommission&utm_sourcecp-400000000398149&utm_mediumshare 放貸流量增加&#xff0c;逾期率也會隨之增加&…

解決 Alfred 每次開機都提示請求通訊錄權限的問題

安裝完 Alfred 以后&#xff0c;每次開機都會提示請求通訊錄權限&#xff0c;把設置里的通訊錄關掉也沒用&#xff0c;每次都提示又非常煩人&#xff0c;這里把解決方法記錄一下。 依次打開 應用程序 - Alfred 3.app - 右鍵顯示包內容 - Contents - Frameworks - Alfred Framew…

【轉】DCOM遠程調用權限設置

原文&#xff1a;https://blog.csdn.net/ervinsas/article/details/36424127 最近幾天被搞得焦頭爛額&#xff0c;由于DCOM客戶端程序是在32位系統下開發的&#xff0c;調試時DCOM服務端也是安裝在同一臺機器上&#xff0c;所有過程一直還算順利。可這次項目實施的時候&#xf…

opencv:邊緣檢測之Laplacian算子思想及實現

Laplacian算子邊緣檢測的來源 在邊緣部分求取一階導數&#xff0c;你會看到極值的出現&#xff1a; 如果在邊緣部分求二階導數會出現什么情況? 從上例中我們可以推論檢測邊緣可以通過定位梯度值大于鄰域的相素的方法找到(或者推廣到大 于一個閥值). 從以上分析中&#xff0c…

使用機器學習預測天氣_如何使用機器學習預測著陸

使用機器學習預測天氣Based on every NFL play from 2009–2017根據2009-2017年每場NFL比賽 Ah, yes. The times, they are changin’. The leaves are beginning to fall, the weather is slowly starting to cool down (unless you’re where I’m at in LA, where it’s on…

laravel 導出插件

轉發&#xff1a;https://blog.csdn.net/gu_wen_jie/article/details/79296470 版本&#xff1a;laravel5 php 5.6 安裝步驟&#xff1a; 一、安裝插件 ①、首先在Laravel項目根目錄下使用Composer安裝依賴&#xff1a; composer require "maatwebsite/excel:~2.1.0"…

國外 廣告牌_廣告牌下一首流行歌曲的分析和預測,第1部分

國外 廣告牌Using Spotify and Billboard’s data to understand what makes a song a hit.使用Spotify和Billboard的數據來了解歌曲的流行。 Thousands of songs are released every year around the world. Some are very successful in the music industry; others less so…

Jmeter測試普通java類說明

概述 Apache JMeter是Apache組織開發的基于Java的壓力測試工具。本文檔主要描述用Jmeter工具對基于Dubbo、Zookeeper框架的Cassandra接口、區塊鏈接口進行壓力測試的一些說明&#xff0c;為以后類似接口的測試提供參考。 環境部署 1、 下載Jmeter工具apache-jmeter-3.3.zip&am…

opencv:Canny邊緣檢測算法思想及實現

Canny邊緣檢測算法背景 求邊緣幅度的算法&#xff1a; 一階導數&#xff1a;sobel、Roberts、prewitt等算子 二階導數&#xff1a;Laplacian、Canny算子 Canny算子效果比其他的都要好&#xff0c;但是實現起來有點麻煩 Canny邊緣檢測算法的優勢&#xff1a; Canny是目前最優…

關于outlook簽名圖片大小的說明

96 dpiwidth576 height114轉載于:https://blog.51cto.com/lch54734/2298115

opencv:畸變矯正:透視變換算法的思想與實現

畸變矯正 注意&#xff1a;雖然能夠成功矯正但是也會損失了部分圖像&#xff01; 透視變換(Perspective Transformation) 概念&#xff1a; 透視變換是將圖片投影到一個新的視平面(Viewing Plane)&#xff0c;也稱作投影映射(Projective Mapping)。 我們常說的仿射變換是透視…

數據多重共線性_多重共線性對您的數據科學項目的影響比您所知道的要多

數據多重共線性Multicollinearity is likely far down on a mental list of things to check for, if it is on a list at all. This does, however, appear almost always in real-life datasets, and it’s important to be aware of how to address it.多重共線性可能根本不…

PHP工廠模式計算面積與周長

<?phpinterface InterfaceShape{ function getArea(); function getCircumference();}/** * 矩形 */class Rectangle implements InterfaceShape{ private $width; private $height; public function __construct($width,$height){ $this->width$…

K-Means聚類算法思想及實現

K-Means聚類概念&#xff1a; K-Means聚類是最常用的聚類算法&#xff0c;最初起源于信號處理&#xff0c;其目標是將數據點劃分為K個類簇&#xff0c; 找到每個簇的中心并使其度量最小化。 該算法的最大優點是簡單、便于理解&#xff0c;運算速度較快&#xff0c;缺點是只能應…

(2.1)DDL增強功能-數據類型、同義詞、分區表

1.數據類型 &#xff08;1&#xff09;常用數據類型  1.整數類型 int 存儲范圍是-2,147,483,648到2,147,483,647之間的整數&#xff0c;主鍵列常設置此類型。 &#xff08;每個數值占用 4字節&#xff09; smallint 存儲范圍是-32,768 到 32,767 之間的整數&#xff0c;用…