【影象處理】影象濾波去噪聲——均值濾波、中值濾波、對稱均值濾波 低通濾波 高通濾波(opencv)
①觀察灰度分佈來描述一幅影象成為空間域,觀察影象變化的頻率被成為頻域。
②頻域分析:低頻對應區域的影象強度變化緩慢,高頻對應的變化快。低通濾波器去除了影象的高頻部分,高通濾波器去除了影象的低頻部分。
(1)低通濾波
①栗子:
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
int main()
{
// Read input image
cv::Mat image= cv::imread("boldt.jpg",0);
if (!image.data)
return 0;
// Display the image
cv::namedWindow("Original Image");
cv::imshow("Original Image",image);
// Blur the image with a mean filter
cv::Mat result;
cv::blur(image,result,cv::Size(5,5));
// Display the blurred image
cv::namedWindow("Mean filtered Image");
cv::imshow("Mean filtered Image",result);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
結果:每個畫素變為相鄰畫素的平均值, 快速的強度變化轉化為平緩的過度
②栗子:近的畫素新增更多的權重。:高斯濾波器
cv::GaussianBlur(image,result,cv::Size(5,5),1.5);
- 1
(2)中值濾波 :非線性濾波
有效去除椒鹽噪點
cv::medianBlur(image,result,5);
- 1
(3)方向濾波(Sobel)
強調影象中的高頻分量,使用高通濾波器進行邊緣檢測。
Sobel運算元是一種經典的邊緣檢測線性濾波器,可被認為是影象在垂直和水平方向變化的測量。
#include <iostream>
#include <iomanip>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "laplacianZC.h"
int main()
{
//Read input image
cv::Mat image= cv::imread("boldt.jpg",0);
if (!image.data)
return 0;
// Display the image
cv::namedWindow("Original Image");
cv::imshow("Original Image",image);
// Compute Sobel X derivative
cv::Mat sobelX;
cv::Sobel(image,sobelX,CV_8U,1,0,3,0.4,128);
// Display the image
cv::namedWindow("Sobel X Image");
cv::imshow("Sobel X Image",sobelX);
// Compute Sobel Y derivative
cv::Mat sobelY;
cv::Sobel(image,sobelY,CV_8U,0,1,3,0.4,128);
// Display the image
cv::namedWindow("Sobel Y Image");
cv::imshow("Sobel Y Image",sobelY);
// Compute norm of Sobel 得到sobel的摸
cv::Sobel(image,sobelX,CV_16S,1,0);
cv::Sobel(image,sobelY,CV_16S,0,1);
cv::Mat sobel;
//compute the L1 norm
sobel= abs(sobelX)+abs(sobelY);
double sobmin, sobmax;
cv::minMaxLoc(sobel,&sobmin,&sobmax);
std::cout << "sobel value range: " << sobmin << " " << sobmax << std::endl;
// Print window pixel values
for (int i=0; i<12; i++) {
for (int j=0; j<12; j++)
std::cout << std::setw(5) << static_cast<int>(sobel.at<short>(i+135,j+362)) << " ";
std::cout << std::endl;
}
std::cout << std::endl;
std::cout << std::endl;
std::cout << std::endl;
// Conversion to 8-bit image
// sobelImage = -alpha*sobel + 255
cv::Mat sobelImage;
sobel.convertTo(sobelImage,CV_8U,-255./sobmax,255);
// Display the image
cv::namedWindow("Sobel Image");
cv::imshow("Sobel Image",sobelImage);
// Apply threshold to Sobel norm (low threshold value)
cv::Mat sobelThresholded;
cv::threshold(sobelImage, sobelThresholded, 225, 255, cv::THRESH_BINARY);
// Display the image
cv::namedWindow("Binary Sobel Image (low)");
cv::imshow("Binary Sobel Image (low)",sobelThresholded);
// Apply threshold to Sobel norm (high threshold value)
cv::threshold(sobelImage, sobelThresholded, 190, 255, cv::THRESH_BINARY);
// Display the image
cv::namedWindow("Binary Sobel Image (high)");
cv::imshow("Binary Sobel Image (high)",sobelThresholded);
- 結果:
(4)影象的拉普拉斯變換
是一種基於影象導數的高通線性濾波器,計算二階倒數已衡量影象的彎曲度。
// Compute Laplacian 3x3
cv::Mat image = cv::imread("boldt.jpg", 0);
cv::Mat laplace;
cv::Laplacian(image,laplace,CV_8U,1,1,128);
// Display the image
cv::namedWindow("Laplacian Image");
cv::imshow("Laplacian Image",laplace);
// Print window pixel values
for (int i=0; i<12; i++) {
for (int j=0; j<12; j++)
std::cout << std::setw(5) << static_cast<int>(laplace.at<uchar>(i+135,j+362))-128 << " ";
std::cout << std::endl;
}
std::cout << std::endl;
std::cout << std::endl;
std::cout << std::endl;
// Compute Laplacian 7x7
cv::Laplacian(image,laplace,CV_8U,7,0.01,128);
// Display the image
cv::namedWindow("Laplacian Image");
cv::imshow("Laplacian Image",laplace);
// Print window pixel values
for (int i=0; i<12; i++) {
for (int j=0; j<12; j++)
std::cout << std::setw(5) << static_cast<int>(laplace.at<uchar>(i+135,j+362))-128 << " ";
std::cout << std::endl;
}
// Extract small window
cv::Mat window(image,cv::Rect(362,135,12,12));
cv::namedWindow("Image window");
cv::imshow("Image window",window);
cv::imwrite("window.bmp",window);
// Compute Laplacian using LaplacianZC class
LaplacianZC laplacian;
laplacian.setAperture(7);
cv::Mat flap= laplacian.computeLaplacian(image);
double lapmin, lapmax;
cv::minMaxLoc(flap,&lapmin,&lapmax);
std::cout << "Laplacian value range=[" << lapmin << "," << lapmax << "]\n";
laplace= laplacian.getLaplacianImage();
cv::namedWindow("Laplacian Image (7x7)");
cv::imshow("Laplacian Image (7x7)",laplace);
// Print Laplacian values
std::cout << std::endl;
for (int i=0; i<12; i++) {
for (int j=0; j<12; j++)
std::cout << std::setw(5) << static_cast<int>(flap.at<float>(i+135,j+362)/100) << " ";
std::cout << std::endl;
}
std::cout << std::endl;
// Compute and display the zero-crossing points
cv::Mat zeros;
zeros= laplacian.getZeroCrossings(lapmax);
cv::namedWindow("Zero-crossings");
cv::imshow("Zero-crossings",zeros);
// Compute and display the zero-crossing points (Sobel version)
zeros= laplacian.getZeroCrossings();
zeros= laplacian.getZeroCrossingsWithSobel(50);
cv::namedWindow("Zero-crossings (2)");
cv::imshow("Zero-crossings (2)",zeros);
// Print window pixel values
for (int i=0; i<12; i++) {
for (int j=0; j<12; j++)
std::cout << std::setw(2) << static_cast<int>(zeros.at<uchar>(i+135,j+362)) << " ";
std::cout << std::endl;
}
// Display the image with window
cv::rectangle(image,cv::Point(362,135),cv::Point(374,147),cv::Scalar(255,255,255));
cv::namedWindow("Original Image with window");
cv::imshow("Original Image with window",image);
cv::waitKey();
return 0;
}
相關推薦
【影象處理】影象濾波去噪聲——均值濾波、中值濾波、對稱均值濾波 低通濾波 高通濾波(opencv)
①觀察灰度分佈來描述一幅影象成為空間域,觀察影象變化的頻率被成為頻域。 ②頻域分析:低頻對應區域的影象強度變化緩慢,高頻對應的變化快。低通濾波器去除了影象的高頻部分,高通濾波器去除了影象的低頻部分。 (1)低通濾波 ①栗子: #include <iostream> #include &l
【python影象處理】影象的濾波(ImageFilter類詳解)
在影象處理中,經常需要對影象進行平滑、銳化、邊界增強等濾波處理。在使用PIL影象處理庫時,我們通過Image類中的成員函式filter()來呼叫濾波函式對影象進行濾波,而濾波函式則通過ImageFil
【影象處理】影象強度變換、直方圖均衡化(Image Intensity Transformations and Histogram Equalization)
實驗要求 該實驗使用強度變換方法對影象進行增強。實驗影象為圖3.8(a) (1.a) 用公式(3.2-2)所示的對數變換方法進行影象增強。 (1.b) 用公式(3.2-3)形式的指數變換方法進行影象增強。實驗的目的是用(1.a)和(1.b)中的
【python影象處理】影象的縮放、旋轉與翻轉
影象的幾何變換,如縮放、旋轉和翻轉等,在影象處理中扮演著重要的角色,python中的Image類分別提供了這些操作的介面函式,下面進行逐一介紹。 1、影象的縮放 影象的縮放使用resize()成員函
【OpenCV3影象處理】影象載入、顯示、儲存
一、影象載入 Mat cv::imread( const String & filename, int flags = IMREAD_COLOR ) 引數一:圖片所在的
【python影象處理】影象的讀取、顯示與儲存
python作為機器學習和影象處理的利器,收到越來越多的推崇,特別是在影象處理領域,越來越多的研究和開發開始轉向使用python語言,下面就介紹python影象處理中最基本的操作,即影象的讀取顯示與儲
【影象處理】影象畫素隨機化:雪花漫天飛
近來經常和心理系做實驗,總是有各種“什麼什麼隨機化,刺激的物理性質保持一樣。。”的需求。之前做《去掩蔽》的實驗時,有一套圖片就是做的畫素隨機化,這是最簡單的隨機化了。當時影象只有兩種畫素,灰的和深灰的,而且深灰的比較少。於是我就統計了深灰畫素點的個數,然後在一張同樣大的灰色圖
【數字影象處理】影象邊緣銳化之微分運算
影象邊緣銳化處理的目的 突出影象的細節,或者增強被模糊的細節,增強影象邊緣,便於提取目標物體的邊界,對影象進行分割、目標區域識別、區域形狀提取等為影象理解和分析打下基礎。 影象邊緣銳化的基本方法 微分運算 梯度銳化 邊緣檢測 影象邊緣型別 通常,邊緣上的灰
【數字影象處理】影象的面積與周長計算
二值化影象區域標記 在二值化影象中,相互聯結的黑畫素集合成為一個(黑)區域,通過對影象內每個區域進行標記操作,求得區域的數目。處理前的f是二值的,畫素要麼為0(黑),要麼為255(白)處理後每個畫素的值即為其所處理區域的標號(1,2,3,。。。) 標記規則1.初始化標記為0,從左到右,從上
opencv for python (13) 影象卷積及影象平滑(平均、高斯模糊、中值模糊、雙邊濾波)
影象卷積 卷積函式 cv2.filter2D(img,-1,kernel) 第一個引數是原影象 第二個引數目標影象的所需深度。如果是負數,則與原影象深度相同 第三個引數是卷積核心 import cv2 import numpy as np
【數字影象處理】線性濾波、最大值濾波,最小值濾波、中值濾波、高頻補償濾波(vs2017+openCV)
一、實驗原理 1、線性濾波 ① 不管是低通線性濾波還是高通線性濾波原理都是一樣的,用圖一所示的濾波器模板進行加權處理,將最終得到的R值賦給w5對應的畫素。 ②低通線性濾波和高通線性濾波不同之處就在於: 低通線性濾波w1+w2+…+w9 = 1,且w1~w9全
【影象處理】【影象去模糊】 總結
本人最近由於做相關去卷積工作,查閱了上百篇文獻,發現在這個領域,可能也是‘水太深’了,並沒有一篇較好的綜述,現在做以下總結---- 只對高斯與散焦模糊的非盲去卷積領域,對於運動模糊並未做總結,但實際上除了點擴散函式的估計有區別,實際上這三類去模糊甚至和去噪,損失函式模型都可
【影象處理】高效的中值濾波(bug 已修復)
之前的bug: 當灰度為255或者0時,出現灰度溢位的bug,導致灰度黑白顛倒,現已修復,並重新將函式改為無返回值型別,原有的帶有返回影象的函式不規範,容易忘記釋放空間。新的函式再最後面 經測試,我的程式計算速度比OpenCV耗時多多了,,,~~(>
【OpenCV影象處理】十五、影象空域濾波(上)
1.空域濾波介紹 空域濾波是一種鄰域處理方法,通過直接在影象空間中對鄰域內畫素進行處理,達到平滑或銳化影象的作用。此外,在影象識別中,通過濾波還可以抽出影象的特徵作為影象識別的特徵模式。 空域濾波是影象處理領域中廣泛使用的主要工具。空域濾波主要可以分為線性濾波和非線性濾波,
【影象處理】【去模糊】影象去模糊之初探--Single Image Motion Deblurring
原文:原文地址 曾經很長一段時間, 對影象去模糊都有一種偏見, 認為這是一個灌水的領域, 沒有什麼實用價值,要到這樣的文章,不管是多高的檔次, 直接pass。 最近在調研最近幾年的關於Computational Photography的一些研究熱點時, 發現影象去模糊這
【影象處理】 增加程式速度的方法
1. stack(棧) heap(堆) 和全域性區 測試BGR轉YUV 的表在stack 和 heap 2. 查詢表 部分查詢表 和3D查詢表 速度比較 3. 查詢表放在堆上和棧上的速度比較 4.
【影象處理】工業相機原理詳述 (轉載)
轉自: https://blog.csdn.net/HelloZEX/article/details/80905095 工業相機是機器視覺系統中的一個關鍵元件,其最本質的功能就是將光訊號轉變成有序的電訊號。選擇合適的相機也是機器視覺系統設計中的重要環節,相機的選擇不僅直接決定所採集到的影象
【影象處理】Lightroom Classic CC 2019 for Mac中文破解版
Lightroom Classic CC 2019 for Mac中文破解版是目前最強大的影象處理軟體之一,簡稱Lr CC 2019破解版,使用lightroom mac 破解版可以讓您獲得最佳的攝影效果所提供的圖片整理編輯工具,提高照片的色彩、刪除瑕疵、伸展畫面等等,可以為您的照片錦上添花。新版L
【 imgproc 模組. 影象處理】形態學變化
一、更多的形態學變化 包括開運算 (Opening)、閉運算 (Closing)、形態梯度 (Morphological Gradient)、頂帽 (Top Hat)、黑帽(Black Hat)。具體可參考《數字影象處理 第三版》(岡薩雷斯)——第九章 形態學影象處理。注:具體原
【RAW影象處理】DxO PhotoLab for Mac破解版
DxO PhotoLab for Mac是一款專業的RAW影象處理軟體,可以讓使用者以最佳影象質量輕鬆生成RAW和JPEG影象,並且DxO PhotoLab Mac版還為使用者提供了一整套智慧輔助校正,讓您可以隨時手動進行微調,有需要的朋友快來看看吧! 下載地址DxO PhotoLab for