在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”函式執行線性濾波的分步過程。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP