さまざまな画像フィルタリング Matlab ベースのフィルタ アルゴリズム (コード オープン ソース)

序文:この記事は、Matlabプラットフォームでのさまざまな画像フィルタリング アルゴリズムに関する段階的なチュートリアルであり、実際の戦闘を例として、プログラミング コードと画像フィルタリングの知識を結びつけます。ブログの画像フィルタリング アルゴリズムには、平均値フィルタリング、メディアン フィルタリング、ガウス フィルタリング、双方向フィルタリング、およびガイド付きフィルタリングが含まれます。画像フィルタリング アルゴリズムは、コンピュータ ビジョンの分野で必須の CV コースであり、あらゆる分野、特に科学研究の分野で広く使用されています。このブログが読者や友人のエンジニアリング プロジェクトや科学研究の生活に少しでも役立つことを願っています。(この記事の最後にあるコードはオープンソースです!)

画像フィルタリング アルゴリズムの一般的な図:

1. 画像フィルタリングの知識

1.1 基本概念

画像フィルタリングは、画像のノイズを抑制し、画像の細部を可能な限り保持しながら画質を向上させることを目的とした一般的な画像処理テクノロジです。このテクノロジーは画像の前処理において非常に重要なステップであり、その後の画像データのマイニング分析のパフォーマンス(例: ターゲットの検出、ターゲットのセグメンテーション、曇り止めおよび雨除去アルゴリズムなど)に直接影響します実際、一般的な畳み込みニューラル ネットワークCNN は、実際にはフィルタリングの一種であり、畳み込みカーネルを使用して画像の特徴パターンを抽出します。ただし、従来のフィルタリングでは、使用されるコンボリューション カーネルには固定パラメータがあり、経験豊富な担当者によって手動で設計されます (手動機能とも呼ばれます)。畳み込みニューラル ネットワークの畳み込みカーネル パラメーターは不明ですが、さまざまなタスクに応じてデータ駆動学習を通じて学習されるパラメーターであり、さまざまなタスクにより適応可能です。著者は次のように付け加えています。「畳み込みは画像アルゴリズムにおいて非常に重要な知識ポイントであり、読者はそれに習熟している必要があります。」

1.2 画像ノイズ

デジタル画像処理では、画像システム伝送媒体記録機器の不完全性により、デジタル画像は形成、伝送、記録のプロセス中にさまざまなノイズによって汚染されることがよくあります。これらのノイズは画像内で孤立したピクセルまたはピクセル ブロックとして現れることが多く、無用な情報の形で現れ、画像の観察可能な情報を混乱させます。したがって、画像フィルタリングの中心的な目的は、画像の特徴をより適切に抽出するためにこれらのノイズを除去することです。

★一般的な画像ノイズ分類: (1) ソルト&ペッパー ノイズ、(2) ガウス ノイズ、(3) ポアソン ノイズ

1.2.1 塩胡椒ノイズ

インパルス ノイズとしても知られるソルトアンドペッパー ノイズは、一部のピクセル値をランダムに変更し、バイナリ イメージでは一部のピクセルが白くなり、一部のピクセルが黒くなります。これは、イメージセンサー、伝送路、復号化プロセスなどによって生成される白黒の明暗点ノイズであり、高齢者にはよく知られている、いわゆる「スノーフレーク」です。著者は次のように付け加えています。RGB 画像上のソルト&ペッパー ノイズは、赤、緑、青 (RGB) ピクセルである可能性もあります。

マットラボコード:

%%椒盐噪声
close all;
clear all;
clc;
I=imread('test.png');
I=im2double(I);
% J = imnoise(I,‘salt & pepper’,d),默认d=0.05
% 在添加类型为Salt & Pepper的噪声时,符号&的前面和后面必须有空格,否则系统会出错
J=imnoise(I,'salt & pepper',0.01);
K=imnoise(I,'salt & pepper',0.05);
% 图像中黑色的像素点为椒盐噪声,白色的像素点为盐噪声
subplot(131),imshow(I);
subplot(132),imshow(J);
subplot(133),imshow(K);

1.2.2 ガウスノイズ

ガウスノイズは、低照度や高温によって発生する電子回路ノイズやセンサーノイズに起因するノイズの一種です。ガウス ノイズは通常のノイズとしても知られ、自然界で最も一般的なノイズです。ガウスノイズは、平滑化フィルタリング技術や画像復元技術により除去できます。

マットラボコード:

%%高斯滤波
close all;
clear all;
clc;
I=imread('test1.jpg');
h=0:0.1:1; % h为在[0,1]之间的向量,表示图像的亮度值
v=0.01:-0.001:0; % v为一个长度和h相同,表示与h中亮度对应的高斯噪声的方差
% J=imnoise(I,'localvar',h,v)在图像的不同亮度值上叠加不同方差的高斯噪声,向量h中没有的亮度值将自动插值得到
J=imnoise(I,'localvar',h,v);
subplot(121),imshow(I);
subplot(122),imshow(J);

1.2.3 ポアソンノイズ

ポアソン ノイズは、ポアソン分布を満たすノイズです。正規分布に非常に似ていると思われるでしょう。実際には、収集するデータが増えるほど精度が高まり、その形状はガウス分布関数に近づきます。分布は、指数関数分布を満たす一般的な離散モデルです。

著者は、「ノイズを追加する効果は、初期画像にある程度依存します。ポアソン ノイズとガウス ノイズはまったく同じように見えますが、実際にはいくつかの違いがあります。」と付け加えています。塩コショウノイズと、特にランダム感のあるガウスノイズ(指数関数的ノイズ)には明確な違いがあります。読者は自分の画像をテストに使用して、これらのノイズに慣れることができます。

マットラボコード:

%%泊松噪声
close all;
clear all;
clc;
I=imread('test3.png');
% J = imnoise(I,‘poisson’)添加泊松噪声给图像I
J=imnoise(I,'poisson');
subplot(121),imshow(I);
subplot(122),imshow(J);

1.3 画像フィルタリングの分類

一般的な線形フィルタ: 
(1) ローパス フィルタ:低周波を通過させる;
(2) ハイパス フィルタ:高周波を通過させる; 
(3) バンドパス フィルタ:特定の領域の周波数を通過させる;
( 4) バンドストップフィルター:特定の範囲内の周波数をブロックし、他の周波数を通過させます;
(5) オールパスフィルター:すべての周波数を通過させ、位相のみを変更します;
(6) ノッチフィルター バンドストップフィルター:狭い周波数をブロックします。特殊なバンドストップフィルターを通過する周波数範囲。

★数学的特性に従って、画像フィルタリングアルゴリズムは通常、線形フィルタリングと非線形フィルタリングに分けられます。

平均値フィルター –> ブラー関数 –>                        線形フィルター 
ガウスフィルター –> GaussianBlur 関数 –>         線形 フィルター
メディアンフィルター –> MedianBlur 関数 –>            非線形フィルター 
バイラテラルフィルター –> BilarateFilter 関数 –>         非線形フィルター
ガイド付きフィルター –> GuideFilter 関数 –>            非線形フィルター

1.4 線形フィルタリングの原理

画像の線形フィルタリング原理:各ピクセルの出力値は、入力ピクセルの加重合計です。つまり、指定されたピクセルの周囲のピクセル値を使用してこのピクセルの最終出力値を決定する演算子であり、本質的には、コンボリューション カーネルの使用ですコンボリューションは、画像処理におけるスムージング/ブラーの最大の舞台裏のボスです。

7x7 の画像ピクセル マトリックスがあるとします。畳み込みフィルタ処理: 7x7 上記は 3x3 ウィンドウで、左から右、上から下に移動し、画像内のピクセルがフィルター ウィンドウ内のデータと畳み込まれ、データが新しいピクセル値として保持されます。一度に 1 ピクセルずつ移動します(フィルター ウィンドウとペースは自分で設定できます)。

2. 平均値フィルタリング

2.1 アルゴリズムの概要

平均値フィルタリングは最も単純な平滑化フィルタであり、通常、画像内の正方形の領域 (通常は 3*3 ) 内で、中心点のピクセルがすべての点のピクセル値の平均になります。平均フィルタリングは、画像全体に対して上記の操作を実行することです。

次のように、コンボリューション カーネル (カーネル) 領域の下のすべてのピクセルの平均を取得し、中央の要素を置き換えます。

平均フィルター アルゴリズムのケース図:

2.2 コードと分析

マットラボコード:

%%均值滤波 
close all;
clear all;
clc;
I = imread('Noise Image.jpg');  % 读取图像 
%I = rgb2gray(I);  % 转换为灰度图像(如果需要)  
% 定义均值滤波器  
h = ones(3,3) / 9;  % 3x3的均值滤波器   
J = imfilter(I, h);  % 应用滤波器   
% 显示原始图像和滤波后的图像  
subplot(1,2,1), imshow(I), title('初始图像');  
subplot(1,2,2), imshow(J), title('均值滤波后的图像');

平均フィルター グラフ:

利点:平均フィルター アルゴリズムはシンプルで、計算速度が速く、アルゴリズムの実装が簡単です。

短所:平均値フィルタリングは中心ピクセルの値を近隣ピクセルの平均値に置き換えるため、画像の詳細が失われやすくなります。平均値フィルタリングはエッジや細部を含む画像の高周波部分を滑らかにし、画像のエッジが曖昧になります。

3. メディアンフィルタリング

3.1 アルゴリズムの概要

メディアン フィルタリングは、ピクセル近傍内のすべてのピクセル値を並べ替え、中央値を出力として取得する非線形信号処理技術ですメディアン フィルタリングは、ご​​ま塩ノイズの除去に特に効果的です

3.2 コードと分析

マットラボコード:

%%中值滤波
close all;
clear all;
clc;
I = imread('Noise Image.jpg');  % 读取图像  
I = rgb2gray(I);  %转换为灰度图像(如果需要)  
J = medfilt2(I);  % 使用2D中值滤波器  % 应用中值滤波    
% 显示原始图像和中值滤波后的图像
subplot(1,2,1), imshow(I), title('原始图像');  
subplot(1,2,2), imshow(J), title('中值滤波后的图像');

中央値フィルター プロット:

利点:メディアン フィルタリングは、画像内の塩胡椒ノイズ、加法ガウス ノイズ、およびその他の種類のノイズを効果的に除去し、画像をより鮮明にします。他のフィルタリング方法と比較して、メディアン フィルタリングはノイズを除去しながら画像のエッジをよりよく保持できます。メディアンフィルタリングの計算処理もシンプルで簡単です。

短所:多くの点、線、鋭い角の詳細を含む画像の場合、メディアン フィルタリングはこれらの詳細のピクセル値を変更する可能性があるため適用できない場合があります。メディアン フィルタリングは、範囲内のすべてのピクセル値を使用する非線形フィルタリング方法です。ピクセル近傍は中央値を選択するために並べ替えられるため、画像に不連続性が生じる可能性があります。

4. ガウスフィルター

4.1 アルゴリズムの概要

ガウス フィルターには、ローパス、バンドパス、ハイパスなど、さまざまな種類があります。通常、画像について話すガウス フィルターは、ガウス ローパス フィルターであるガウス ブラーを指します。画像(画像の細かい部分)は保持され、画像の低周波成分(画像の滑らかな領域)は保持されるため、画像に「ガウスぼかし」を実行すると、画像は次のようになります。ぼやけてます。ガウスぼかしは、ガウス ノイズ (正規分布に従うノイズ) を抑制するのに非常に効果的です。

★ガウスフィルタリングは、平均フィルタリングと同様に、畳み込み解法にフィルタウィンドウと画像を使用します。

  • 平均フィルターのフィルター ウィンドウ係数はすべて同じで、1 です。
  • ガウス フィルターのフィルター ウィンドウ係数は、テンプレートの中心からの距離が増加するにつれて減少します (2 次元ガウス分布に従います)。

ガウス関数分布:

公式:

分布:ガウス分布(正規分布)

 正規分布(ガウス分布)は釣鐘型の曲線で、中心に近づくほど値が大きくなり、中心から離れるほど値が小さくなります。スムージング結果を計算するときは、「中心点」を原点として使用し、法線曲線上の位置に応じて他の点に重みを割り当て、加重平均を取得するだけです。 

4.2 コードと分析

マットラボコード:

%%高斯滤波
close all;
clear all;
clc; 
I = imread('Noise Image.jpg');  % 读取图像   
%I = rgb2gray(I);  % 转换为灰度图像(如果需要)    
J = imgaussfilt(I, 2);  % 使用标准差为2的高斯滤波器  % 应用高斯滤波器    
% 显示原始图像和高斯滤波后的图像  
subplot(1,2,1), imshow(I), title('原始图像');  
subplot(1,2,2), imshow(J), title('高斯滤波后的图像');

ガウスフィルターグラフ:

利点:ガウス フィルタリングは、画像を平滑化し、ノイズを除去し、画像の全体的な構造を保持できます。ガウス フィルタリングは、ガウス カーネルの標準偏差を調整することで制御でき、高い柔軟性を持っています。ガウス フィルタリングは、ウィンドウを離散化した場合の計算が高速です。スライディングウィンドウ畳み込みが実装されており、リアルタイム処理に適しています。

短所:ガウス フィルターは、エッジや細部を含む画像の高周波部分を滑らかにするため、画像のエッジがぼやける可能性があります。ガウス フィルターは畳み込み演算が必要で、計算の複雑さが比較的高く、大量のコンピューティング リソースを消費する可能性があります。そして時間。

5. 双方向フィルタリング

5.1 アルゴリズムの概要

バイラテラル フィルタリングは1998 年C. Tomasiによって、古典的な非線形空間フィルタリング手法です。フィルターの疎性の定式化では、バイラテラル フィルターでは、出力ピクセルと近隣の他のピクセルの間のユークリッド距離と値の差も考慮されます。つまり、空間ドメインドメインの差も考慮されます。

(1) スペースドメインコア

テンプレートの重みは、ピクセル位置のユークリッド距離によって決定されます\オメガ_{d} 。

テンプレートウィンドウの他の係数の座標です。

テンプレートウィンドウの中心座標点です。

\シグマ_{d}空間領域におけるガウス カーネル関数の標準偏差であり、ピクセル位置の重みを制御するために使用されます。

式を使用して生成されたフィルター テンプレートとガウス フィルターで使用されるテンプレートの間に違いはありません。重みはドメイン カーネルと呼ばれ、空間係数および空間ドメインとも呼ばれます。計算式からわかるように、中心点 p に対する隣接点 q の近接度を計算するため、空間的な近接度を測定するためにドメイン カーネルが使用されます。

(2) 値範囲カーネル 

テンプレートの重みはピクセル値の差によって決まります\オメガ_{r} 。

その中には、q(i,j)テンプレート ウィンドウの他の係数の座標も含まれており、その点での画像のピクセル値f(i,j) を示します。q(i,j)

p(k,l)はテンプレート ウィンドウの中心座標点であり、対応するピクセル値は ですf(k,l)

\シグマ_{r}は、ピクセル値ドメイン上のガウス カーネル関数の標準偏差であり、ピクセル値の重みを制御するために使用されます。

重みは一般に\オメガ_{r}値ドメイン カーネルまたはピクセル値ドメインと呼ばれますが、値ドメイン カーネルであっても\オメガ_{r}空間ドメイン カーネルであっても\オメガ_{d}、そのサイズは [0 1] の間です。

最後に、バイラテラル フィルターのスライディング ウィンドウの重みは、上記の 2 つのテンプレートを乗算することによって取得されます。

したがって、バイラテラル フィルターのデータ式は次のように表すことができます。

バイラテラル フィルターの一方の側は、前述のガウス平滑化フィルターです。2 つのピクセル間の物理的距離が大きいほど、重みは小さくなり、その逆も同様です。バイラテラル フィルターのもう一方の側は、ピクセル値の範囲によって決まります。ピクセル 、グレー値の差が小さいほど、エッジである可能性は低くなり、平滑化する必要がある、つまりフィルターでの重みを増やす必要があります。逆に、ピクセル値の差が大きいほど、エッジである可能性が高くなります。それを維持するために最善を尽くす必要があります。

双方向フィルタリングのプロセスは次のようになります。急峻なエッジでは、ピクセル差分の重みが使用されるため、エッジは良好に保存されます。

5.2 コードと分析

マットラボコード:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%彩色图双边滤波%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function g = bfilt_rgb(f,r,a,b)
% f灰度图;r滤波半径;a全局方差;b局部方差
[x,y] = meshgrid(-r:r);
w1 = exp(-(x.^2+y.^2)/(2*a^2));
f = tofloat(f);%f = im2double(f);
 
h = waitbar(0,'Applying bilateral filter...');
set(h,'Name','Bilateral Filter Progress');
 
fr = f(:,:,1);
fg = f(:,:,2);
fb = f(:,:,3);
[m,n] = size(fr);
fr_temp = padarray(fr,[r r],'symmetric');
fg_temp = padarray(fg,[r r],'symmetric');
fb_temp = padarray(fb,[r r],'symmetric');
[gr,gg,gb] = deal(zeros(size(fr)));
 
 
for i = r+1:m+r
    for j = r+1:n+r
        temp1 = fr_temp(i-r:i+r,j-r:j+r);
        temp2 = fg_temp(i-r:i+r,j-r:j+r);
        temp3 = fb_temp(i-r:i+r,j-r:j+r);
        dr = temp1 - fr_temp(i,j);
        dg = temp2 - fg_temp(i,j);
        db = temp3 - fb_temp(i,j);
        w2 = exp(-(dr.^2+dg.^2+db.^2)/(2*b^2));
        w = w1.*w2;
        gr(i-r,j-r) = sum(sum(temp1.*w))/sum(w(:));
        gg(i-r,j-r) = sum(sum(temp2.*w))/sum(w(:));
        gb(i-r,j-r) = sum(sum(temp3.*w))/sum(w(:));
    end
    waitbar((i-r)/n);
end
g = cat(3,gr,gg,gb);
% g = revertclass(g);
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%可以用到的函数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [out,revertclass]=tofloat(in)
identity=@(x) x;
tosingle=@im2single;
 
table={'uint8',tosingle,@im2uint8
'uint16',tosingle,@im2uint16
'int16',tosingle,@im2int16
'logical',tosingle,@logical
'double',identity,identity
'single',identity,identity};
 
classIndex=find(strcmp(class(in),table(:,1)));
 
if isempty(classIndex)
    error('unsupported input immage class.');
end
 
out=table{classIndex,2}(in);
revertclass=table{classIndex,3};
end
%%双边滤波
close all;
clear all;
clc; 
I = imread('Noise Image.jpg');  % 读取图像   
%I = rgb2gray(I);  % 转换为灰度图像(如果需要)   
J = bfilt_rgb(I, 3, 9, 15);  % 9x9滤波器,空间标准差为15,灰度标准差为15  % 应用双边滤波器    
% 显示原始图像和双边滤波后的图像  
subplot(1,2,1), imshow(I);  
subplot(1,2,2), imshow(J);

双方向フィルタグラフ:

利点:バイラテラル フィルタリングでは、空間近傍とグレー値の差を同時に考慮できるため、画像を平滑化しながらエッジ情報をより適切に保持できます。バイラテラル フィルタリングは、画像内のノイズ、特に塩コショウ ノイズを効果的に除去できます。バイラテラル フィルタリングのパラメータ最良の結果を得るために、さまざまなアプリケーションシナリオに従ってパラメータを調整できます。

短所:双方向フィルタリングには畳み込み演算とソート演算が必要ですが、これは計算的に複雑で、多くの計算コストを消費します。双方向フィルタリングのパラメータ選択はフィルタリング効果に大きな影響を与えるため、最良の効果を得るには慎重に調整する必要があります。

6. ガイド付きフィルタリング

6.1 アルゴリズムの概要

ガイド付きフィルタリングのプロセスを以下の図に示します。これにより、優れたエッジ保存パフォーマンスと計算の複雑さが実現されます。 

6.2 コードと分析

マットラボコード:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function q = guidedfilter(I, p, r, eps)
%   GUIDEDFILTER   O(1) time implementation of guided filter.
%
%   - guidance image: I (should be a gray-scale/single channel image)
%   - filtering input image: p (should be a gray-scale/single channel image)
%   - local window radius: r
%   - regularization parameter: eps

[hei, wid] = size(I);
N = boxfilter(ones(hei, wid), r); % the size of each local patch; N=(2r+1)^2 except for boundary pixels.

mean_I = boxfilter(I, r) ./ N;
mean_p = boxfilter(p, r) ./ N;
mean_Ip = boxfilter(I.*p, r) ./ N;
cov_Ip = mean_Ip - mean_I .* mean_p; % this is the covariance of (I, p) in each local patch.

mean_II = boxfilter(I.*I, r) ./ N;
var_I = mean_II - mean_I .* mean_I;

a = cov_Ip ./ (var_I + eps); % Eqn. (5) in the paper;
b = mean_p - a .* mean_I; % Eqn. (6) in the paper;

mean_a = boxfilter(a, r) ./ N;
mean_b = boxfilter(b, r) ./ N;

q = mean_a .* I + mean_b; % Eqn. (8) in the paper;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function imDst = boxfilter(imSrc, r)

%   BOXFILTER   O(1) time box filtering using cumulative sum
%
%   - Definition imDst(x, y)=sum(sum(imSrc(x-r:x+r,y-r:y+r)));
%   - Running time independent of r; 
%   - Equivalent to the function: colfilt(imSrc, [2*r+1, 2*r+1], 'sliding', @sum);
%   - But much faster.

[hei, wid] = size(imSrc);
imDst = zeros(size(imSrc));

%cumulative sum over Y axis
imCum = cumsum(imSrc, 1);
%difference over Y axis
imDst(1:r+1, :) = imCum(1+r:2*r+1, :);
imDst(r+2:hei-r, :) = imCum(2*r+2:hei, :) - imCum(1:hei-2*r-1, :);
imDst(hei-r+1:hei, :) = repmat(imCum(hei, :), [r, 1]) - imCum(hei-2*r:hei-r-1, :);

%cumulative sum over X axis
imCum = cumsum(imDst, 2);
%difference over Y axis
imDst(:, 1:r+1) = imCum(:, 1+r:2*r+1);
imDst(:, r+2:wid-r) = imCum(:, 2*r+2:wid) - imCum(:, 1:wid-2*r-1);
imDst(:, wid-r+1:wid) = repmat(imCum(:, wid), [1, r]) - imCum(:, wid-2*r:wid-r-1);
end
%%灰度图引导滤波
close all;
clear all;
clc; 
I = imread('Noise Image.jpg');  % 读取图像
if length(size(I))>2
    I=rgb2gray(I);
end
I = double(I) / 255;
p = I;
r = 9; 
eps = 0.4^2;      %0.021^2  0.04^2
J = guidedfilter(I,p,r,eps);           %引导滤波
% 显示原始图像和双边滤波后的图像  
subplot(1,2,1), imshow(I);  
subplot(1,2,2), imshow(J);

ガイド付きフィルター マップ:

利点:ガイド付きフィルタリングは、ガイド画像のエッジ情報を使用して、出力画像のエッジをガイド画像に似せることができるため、画像を平滑化しながらエッジ情報をより適切に保持できます。ガイド フィルタはガイドの情報を使用するためです。画像の通り、ノイズに強く、ある程度の堅牢性があります。

短所:ガイド付きフィルタリングには畳み込み演算と反復的な最適化が必要であり、多くのコンピューティング リソースと時間が消費される可能性があります (バイラテラル フィルタリングよりも短い)。入力画像に広範囲のノイズがある場合、ガイド付きフィルタリングの効果が影響を受ける可能性があります。

7. アルゴリズムの概要

画像フィルタリング アルゴリズムは、コンピュータ ビジョンの分野で習得する必要があるスキルであり、アルゴリズム研究や組み込み AI 業界に従事するエンジニアは、このスキルに精通している必要があります。画像フィルタリング アルゴリズム 時代の科学の進歩に伴い、アンチブラインド コンボリューション フィルタリング、サイド ウィンドウ ボックス フィルタリング、ウィーナー フィルタリングなど、多くの新しい画像フィルタリング アルゴリズムが登場しました。読者の皆様には、実際のエンジニアリング プロジェクトにおいて、さまざまな優れた画像フィルタリング アルゴリズムを盲目的に追求しないでください。実際、プロジェクトに適したフィルタは、優れたフィルタです。

8. オープンソースのコード

コード アドレス:  Matlab に基づくさまざまな画像フィルタリング アルゴリズムのコード リソース - CSDN ライブラリ

ポイントが足りない場合は、フォローしてコメント欄にメールアドレスを残していただければ作者ソースコードとフォローアップの質問を無料で提供します。ぜひフォローをお願いします!

おすすめ

転載: blog.csdn.net/black_sneak/article/details/134427624