[デジタル画像処理】周波数領域フィルタ(OpenCVの+ vs2017)

免責事項:この記事はブロガーのオリジナルの記事、再現され、ソースhttps://blog.csdn.net/C2681595858/article/details/84487617を明記してください

まず、実験計画

試験前の準備:フーリエ変換と逆OpenCVの例の解釈を変換します。

図1に示すように、準備をフィルタリング前

  • フーリエ変換は、実部と虚部を知っているが、フーリエ変換後の画像を変換するため、元の必要性の逆変換は、振幅スペクトルを示し、それが直接バック空域に、画面上の表示画像から周波数ドメインが行われていると言うことですではない(それは実部と虚部を知らないので)。
  • だから、逆フーリエ変換を実行することを可能にするために、我々は前進フーリエ変換中間値を保持しなければならない、それは実部と虚部の値が保存されていることです。
  • 彼は計算された第1の振幅スペクトル、その後、シフトであるため、しかし、例の公定法の直接の使用は、それは、動作しません。しかし、イメージシフトの使用に慣れて、私たちのハイパスやローパスフィルタリング、(のが、画像公式の例シフトは言っていない実部と虚部)ので、私たちはしなければならない最初のそれぞれ実部と虚部シフトした後、濾過しました。
  • 実部と虚部を同じ方法にシフトしているので、しかし、2つを使用する必要性は、直接送信されたパラメータを呼び出すことができる機能を設計することが可能です:機能が設計されています。
  • プログラムはあまり混乱させるために、我々は常にcomplexIが割り当てられるとcomplexIの値を変更しないという原則の変換中に従ってください。一方IMATは、[2]最初から割り当てられている、それはもはや使用されるまであなたは、変更を超える時間のシフトを破壊したいない場合は、移動を維持してきました。

2、機能設計

class FDF {
public:
	/*
	构造函数,可以直接传入文件名来创建
	*/
	FDF(string image_spa_in);

	/*
	如果创建对象时没有穿入文件名,可以后期设置文件名
	*/
	void setImage(string image_spa_in);

	/*
	*返回空域图像
	每次滤波时不会保存上次滤波的结果
	所以在每次滤波以后要及时调用该函数取得空域图像
	*/
	Mat getImageSpa();

	/*
	*返回频域图像
	每次滤波时不会保存上次滤波的结果
	所以在每次滤波以后要及时调用该函数取得频域图像
	*/
	Mat getImageFre();

	/*
	傅里叶变换,只需一开始调用一次,得到频域图像后结果会长期保存,无需多次调用
	*/
	void dft_();

	/*
	*傅里叶反变换
	每次对图像滤波结束以后可以用它来得到滤波后空域的图像
	*/
	void idft_();

	/*
	*下面是几种低通滤波器
	*/
	void ILPF(float d0);
	void BLPF(int n, float d0);
	void GLPF(float d0);

	/*
	*拉普拉斯滤波器
	*/
	void Laplacian();

	/*
	*这个函数用来设置频域图像
	*由于滤波操作是在复数(2通道Mat)上进行的,所以要显示频域图像的话首先要进行一些处理
	*/
	void setFreImg();//这个函数用来将各种滤波后的中间结果转变为频域图像存储在Image_fre中

	/*
	*添加噪音
	*/
	void addNoise();
private:
	Mat image_spa;//存放原始空域图像
	Mat complexI;//存放复数形式的图像
	Mat imat[2];//这个是提供给各种滤波的,是将complexI分开并移中后的结果
	Mat Image_fre;//存放滤波后频域的图像

	void splitAndCenter();//将complexI分开并移中后的存储到imat2[]中
	void center(Mat& imag);//移中
	
};
float dist(const float& a, const float& b, const float& c, const float& d);

第二に、実験プロセス

  • 2つのプライベート関数がデザイン:void center(Mat& imag);void splitAndCenter();最初は、作物や移動に渡さIMAGに責任がある、もちろん、また逆に使用することは取り消さシフトの変換します。第二部材は、プライベートコール及び分割中心complexIシフトすることを担当して、結果が[2]、それは後続のフィルタリングオペレーションのさまざまな便利であるIMATに格納されています。
  • void dft_();フーリエ変換の中間結果、フーリエ変換が、変換がまだ2チャンネル結果の形で分割されていない後続のフィルタリング動作を容易complexIプライベート変数に格納されています。
  • void idft_();逆フーリエ変換は、周波数から空間領域へ[2]、責任IMATを変換し、プライベート変数image_spaに結果を格納します。
  • 他の機能は、高域通過フィルタリング及び逆をローパスフィルタリングするので、それだけでローパスフィルタリング、作らラプラシアンフィルタをフィルタリングする高域通過され、対応するフィルタです。

第三に、結果分析

  • 原画像
    ここに画像を挿入説明
    ここに画像を挿入説明
  • ローパスフィルタオーバー
    ここに画像を挿入説明
    ここに画像を挿入説明
  • バターワースフィルタ
    ここに画像を挿入説明
    ここに画像を挿入説明
  • ガウスフィルタ
    ここに画像を挿入説明
    ここに画像を挿入説明
  • ラプラシアンフィルタ
    ここに画像を挿入説明
    ここに画像を挿入説明
  • ノイズを追加
    ここに画像を挿入説明
    ここに画像を挿入説明

おすすめ

転載: blog.csdn.net/C2681595858/article/details/84487617