在MATLAB中不使用Imfilter函式進行線性濾波


在MATLAB中,“線性濾波”是一種將線性濾波器應用於數字影像的技術。線性濾波的工作原理基於卷積的概念。

本文旨在解釋線性濾波的概念以及如何在MATLAB中不使用“imfilter”函式的情況下執行線性濾波。

什麼是線性濾波?

在數字影像處理中,將線性濾波器(也稱為卷積核)應用於數字影像的過程稱為線性濾波。線性濾波的工作原理基於卷積的概念。

  • 線上性濾波過程中,將卷積核應用於輸入數字影像。

  • 線性濾波廣泛應用於各種應用中,例如噪聲減少、邊緣銳化、邊緣檢測、影像模糊等等。

  • 在MATLAB中,我們可以使用“imfilter”函式或手動方法執行線性濾波。

在本教程中,我們將學習如何在MATLAB中不使用“imfilter”函式的情況下應用線性濾波。

在MATLAB中不使用Imfilter函式進行線性濾波

我們可以使用MATLAB在不使用“imfilter”函式的情況下應用線性濾波。以下是分步過程。

  • 步驟(1) - 讀取輸入影像。為此,請使用“imread”函式。

  • 步驟(2) - 將輸入影像轉換為雙精度以進行計算。

  • 步驟(3) - 建立濾波器核。

  • 步驟(4) - 確定輸入影像和濾波器核的大小。

  • 步驟(5) - 初始化一個填充零的陣列以儲存濾波後的影像。

  • 步驟(6) - 基於濾波器核確定填充大小,以處理影像邊界附近的卷積。

  • 步驟(7) - 用零填充輸入影像,以確保在影像邊界附近的區域正確應用濾波器核。

  • 步驟(8) - 執行感興趣區域 (ROI) 與濾波器核的卷積,並將結果儲存在一個變數中。

  • 步驟(9) - 顯示線性濾波後的影像。

示例

讓我們來看一個例子,瞭解如何在MATLAB中不使用“imfilter”函式的情況下執行影像的線性濾波。

% MATLAB code to perform linear filtering without using imfilter function
% Read the input image
I = imread('https://tutorialspoint.tw/assets/questions/media/14304-1687425269.jpg');

% Convert it to double for calculations
I = double(I);

% Define the desired filter kernel
fil_knl = ones(3, 3) / 9;			% Averaging filter kernel

% Determine the sizes of image and filter kernel
[I_h, I_w] = size(I);	% Image size
[fil_h, fil_w] = size(fil_knl);		% Filter size

% Create an output image with zero initials
out_img = uint8(zeros(I_h, I_w));

% Calculate the padding size as per filter
p1 = floor(fil_h / 2);
p2 = floor(fil_w / 2);

% Perform padding of the input image
pad_img = padarray(I, [p1, p2], 0);	% 0 is background color

% Perform convolution between ROI and filter
for i = 1 : I_h
   for j = 1 : I_w
      % Declare the ROI in the padded image
      roi = pad_img(i : i + fil_h - 1, j : j + fil_w - 1);
        
      % Convolution of ROI and filter kernel
      out_img(i, j) = sum(sum(roi .* fil_knl));
   end
end

% Display the original and filtered images
figure;
subplot(2, 1, 1);
imshow(uint8(I));
title('Original Image');

subplot(2, 1, 2);
imshow(out_img);
title('Filtered Image');

輸出

執行此程式碼時,將產生以下輸出 -

程式碼解釋

在這個MATLAB示例中,我們首先使用“imread”函式讀取輸入影像。然後,我們將輸入影像轉換為雙精度以進行計算。

之後,我們建立一個所需的濾波器核,在這個例子中,我們建立了一個 (3 × 3) 平均濾波器。

然後,我們使用“size”函式確定輸入影像和濾波器核的大小。接下來,我們建立一個填充零的陣列來儲存濾波後的輸出影像。

然後,我們根據濾波器核計算填充大小,並將此填充應用於輸入影像,以確保在影像邊界附近正確應用核。

之後,我們宣告一個巢狀迴圈來確定感興趣區域 (ROI),並執行 ROI 與濾波器核之間的卷積以生成濾波後的影像。

最後,我們使用“imshow”函式顯示輸入影像和濾波後的輸出影像。

結論

總之,線性濾波是數字影像處理中的一種過程,用於將線性濾波器應用於影像,並用於各種影像處理任務,例如邊緣銳化、邊緣檢測、影像模糊、噪聲減少等。在本教程中,我藉助MATLAB程式設計示例,詳細解釋了不使用“imfilter”函式執行線性濾波的分步過程。

更新於:2023年10月9日

207 次瀏覽

啟動你的職業生涯

完成課程後獲得認證

開始學習
廣告
© . All rights reserved.