MATLAB中有哪些不同型別的去噪濾波器?


在MATLAB中,去噪濾波器是一種可以減少或去除數字影像或數字訊號中噪聲的工具。眾所周知,噪聲是數字訊號中不需要的訊號或干擾,它會影響訊號質量或導致訊號處理中的錯誤。因此,需要去除或減少訊號或影像中的噪聲。這可以透過去噪濾波器來實現。

在本教程中,我們將探討MATLAB中幾種不同型別的去噪濾波器,並使用MATLAB程式設計實現它們。

MATLAB中去噪濾波器的型別

MATLAB 提供各種型別的去噪濾波器,以減少或去除數字訊號或影像中的不同型別的噪聲和干擾。一些常用的去噪濾波器如下:

  • 中值濾波器 - 中值濾波器透過用影像中附近畫素的中值替換每個畫素來減少噪聲。中值濾波器在減少或去除影像中的椒鹽噪聲方面非常有效。

  • 高斯濾波器 - 此濾波器使用卷積運算去除影像中的噪聲。它可以去除影像中的高斯噪聲以使其平滑。

  • 維納濾波器 - 這是一種自適應濾波器,用於減少真實訊號和估計訊號之間的均方誤差。當已知噪聲統計資訊時,使用此濾波器。

在MATLAB中應用去噪濾波器的過程

在MATLAB中,我們可以按照以下步驟將去噪濾波器應用於影像以減少或去除噪聲:

  • 步驟(1) - 讀取噪聲影像或訊號。

  • 步驟(2) - 將輸入影像轉換為灰度以應用濾波器。

  • 步驟(3) - 根據噪聲特性選擇合適的去噪濾波器。

  • 步驟(4) - 將噪聲濾波器應用於輸入影像。

  • 步驟(5) - 顯示結果。

現在,讓我們討論在MATLAB中上述三種去噪濾波器的實現。

(1). MATLAB中的中值濾波器

中值濾波器透過用其相鄰畫素的中值替換每個畫素值來對數字訊號或影像進行去噪。這種型別的濾波器在減少或去除訊號或影像中的椒鹽噪聲方面非常有效。

語法

可以使用MATLAB的內建函式“medfilt2”應用此濾波器。“medilt2”的語法如下:

filtered_img = medfilt2(noisy_image, window_size);

下面的MATLAB程式演示了中值濾波器去除影像噪聲的實現。

Matlab示例(1)

% MATLAB code for implementing median filter
% Read the noisy input image
img = imread('https://tutorialspoint.tw/assets/questions/media/14304-1687425236.jpg');

% Convert the image to grayscale
gray_img = rgb2gray(img);

% Apply the median filter to the noisy image 
filtered_img = medfilt2(gray_img, [3, 3]);

% Display the noisy image and filtered image
subplot(1, 2, 1), imshow(gray_img), title('Noisy Image');
subplot(1, 2, 2), imshow(filtered_img), title('Filtered Image');

輸出

解釋

在這個MATLAB程式碼中,我們首先使用“imread”函式讀取噪聲影像並將其儲存在變數“img”中。然後,我們使用“rgb2gray”函式將輸入的RGB影像轉換為灰度影像,以便對其應用濾波器。接下來,我們將中值濾波器應用於灰度影像以去除噪聲,並將結果儲存在變數“filtered_img”中。最後,我們使用“imshow”函式顯示輸入的噪聲影像和濾波後的影像。

(2). MATLAB中的高斯濾波器

高斯濾波器是另一種用於去除高斯噪聲同時平滑數字影像的去噪濾波器。此濾波器使用高斯核來應用卷積運算以去除影像中的噪聲。

語法

在MATLAB中,我們可以使用“imgaussfilt”函式將高斯濾波器應用於影像。此函式具有以下語法:

filtered_img = imgaussfilt(noisy_img, std_deviation);

Matlab示例(2)

下面的MATLAB程式演示瞭如何實現高斯濾波器以去除影像中的噪聲。

% MATLAB code for implementing Gaussian filter
% Read the noisy input image
img = imread('https://tutorialspoint.tw/assets/questions/media/14304-1687425236.jpg');

% Convert the image to grayscale
gray_img = rgb2gray(img);

% Apply the Gaussian filter to the noisy image 
filtered_img = imgaussfilt(gray_img, 1);

% Display the noisy image and filtered image
subplot(1, 2, 1), imshow(gray_img), title('Noisy Image');
subplot(1, 2, 2), imshow(filtered_img), title('Filtered Image');

輸出

解釋

在這個MATLAB程式碼中,我們首先使用“imread”函式讀取噪聲影像並將其儲存在變數“img”中。然後,我們使用“rgb2gray”函式將輸入的RGB影像轉換為灰度影像,以便對其應用濾波器。之後,我們將高斯濾波器應用於灰度影像以去除高斯噪聲,並將結果儲存在變數“filtered_img”中。最後,我們使用“imshow”函式顯示噪聲影像和濾波後的影像。

(3). MATLAB中的維納濾波器

在MATLAB中,維納濾波器是一種用於減少數字訊號或影像中噪聲的自適應濾波器。此濾波器透過最小化真實訊號和估計訊號之間的均方誤差來執行影像或訊號的去噪。

語法

要應用維納濾波器,我們在影像中使用“wiener2”函式。此函式具有以下語法:

filtered_img = wiener2(noisy_img, window_size, noise_power);

此處,噪聲功率使用以下表達式估算:

noise_power = abs(fft2(noisy_img)).^2 / numel(noisy_img);

Matlab示例(3)

現在,讓我們看看MATLAB中維納濾波器的實現。

% MATLAB code for implementing wiener filter
% Read the noisy input image
img = imread('https://tutorialspoint.tw/assets/questions/media/14304-1687425236.jpg');

% Convert the image to grayscale
gray_img = rgb2gray(img);

% Estimate the noise power for the given image
noise_power = abs(fft2(gray_img)).^2 / numel(gray_img);

% Apply the wiener filter to the noisy image 
filtered_img = wiener2(gray_img, [3, 3], noise_power);

% Display the noisy image and filtered image
subplot(1, 2, 1), imshow(gray_img), title('Noisy Image');
subplot(1, 2, 2), imshow(filtered_img), title('Filtered Image');

輸出

解釋

在這個MATLAB程式中,我們首先使用“imread”函式讀取噪聲影像。然後,我們使用“rgb2gray”函式將輸入的RGB影像轉換為灰度影像,以便應用濾波器。接下來,我們將維納濾波器應用於灰度影像以去除噪聲。最後,我們使用“imshow”函式顯示噪聲影像和濾波後的影像。

結論

這就是MATLAB中用於減少或去除數字訊號和影像中噪聲的不同型別的去噪濾波器。在本教程中,我們介紹了三種最常用的去噪濾波器,即“中值濾波器”、“高斯濾波器”和“維納濾波器”,並解釋了它們在MATLAB程式設計中的實現。您可以使用上述MATLAB程式碼嘗試處理您自己的噪聲影像,以檢視其功能。

更新於:2023年9月6日

195 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告