画像ピラミッド
画像ピラミッドの概念は:
私たちは、多くの場合、画像処理、画像サイズを調整し、変換のセットはinとout画像のズームを実現することができるが、最も一般的なのは、(ズームイン)及び(ズームアウト)外に拡大されているが、ここでは、画像ピラミッドを導入します
古代ピラミッド画像ピラミッドの系列からなる、底部が上部で最大画像サイズ、最小画像サイズであり、そして空間から上から下に画像
イメージダウンするために使用されるガウシアンピラミッド---サンプリング
、ダウンサンプリング層によって層ボトムアップからのガウシアンピラミッドを
M×NのM / 2×N / 2の原画像をダウンサンプリング後の画像サイズを、ソース画像は、すなわち、層のダウンサンプリング後に得られた画像について、列と偶数行を削除された
ガウス二段階プロセスピラミッド生成
ガウスぼかしの現在の層
の電流偶数行と列レイヤを削除する
だけの1/4サイズを有し、次の層、と比較して、そのような層を層上に画像を得ることを
14 641
1/16 16 4 24 4 16
6 6 24 36 24
4 16 4 24 16
14 641
異なるガウス(ガウシアンの差- DOG)
定義:画像は、異なるパラメータ減算におけるガウスぼかし後の結果と関係することであり、出力画像が得られます。異なる呼ばガウス(DOG)
しばしば、グレースケール画像強調、焦点検出に用いる画像のガウス固有の特徴は、異なります
その上側ダウンサンプリング画像に基づいて画像を再構成するために用いられるラプラシアンピラミッド---
関連APIサンプリング
拡大するためにズーム-オンサンプリング(CV :: pyrUp)を
ダウンサンプリング(CV :: pyrDownを) -狭いズームアウト
(pyrUpをマットSRC、マットDEST、サイズ( src.cols * 2、src.rows * 2) 各ピクチャの生成された画像)が幅と高さで2倍に拡大されています
pyrDown(マットSRC、マットDEST、サイズ(src.cols / 2、src.rows / 2)); 画像は、各縮小画像の幅と高さで2回発生される
ガウスコードをピラミッド示します
#include<opencv2/opencv.hpp>
#include<iostream>
#include"math.h"
using namespace cv;
int main(int argc,char** argv){
Mat src,dst;
src = imread("");
if(!src.data){
printf("could not load image...\n");
return -1;
}
char INPUT_WIN[] = "input image";
char OUTPUT_WIN[] = "output image";
namedWindow(INPUT_WIN,CV_WINDOW_AUTOSIZE);
namedWindow(OUTPUT_WIN,CV_WINDOW_AUTOSIZE);
imshow(INPUT_WIN,src);
//上采样
pyrUp(src,dst,Size(src.cols*2,src.rows*2));
imshow(OUTPUT_WIN,dst);
//降采样
Mat s_down
pyrDown(src,s_down,Size(src.cols/2,src.rows/2));
imshow(OUTPUT_WIN,s_down);
//DOG 高斯不同
Mat g1,g2,gray_src,dogImg;
cvtColor(src,gray_src,CV_BGR2GRAY);
GaussianBlur(gray_src,g1,Size(3,3),0,0);
GaussianBlur(g1,g2,Size(3,3),0,0);
subtract(g1,g2,dogImg,Mat());
normalize(dogImg,dogImg,255,0,NORM_MINMAX);
imshow("DOG Image",dogImg);
waitKey(0);
return 0;
}
しきい値の基本的な操作
画像閾値(しきい値)
しきい値が何でありますか?簡単に言えば、それはスケールの画像分割で、スケールが閾値生成アルゴリズム、生成されたものに基づいていますか?しきい値のタイプ。(バイナリセグメンテーション)
---閾値タイプ2値化閾値(閾値バイナリ)
左図に示すに分布の画像画素のSrc(x、y)の値を下げ、水平線は、閾値青色を表します
DST(X、Y)= MAXVAL ifsrc(X、Y)> THRESH
= 0さもなければ
---逆2値化閾値(反転バイナリ閾値)
DST(X、Y)= 0 ifsrc(X、Y)> THRESH
= MAXVALさもなければ
---截断(TRUNCATE)
DST(X、Y)=閾値ifsrc(X、Y)> THRESH
= SRC(x、y)はothrewise
---阈值取零(ゼロ閾値)
DST(X、Y)= SRC(x、y)はifsrc(X、Y)> THRESH
= 0さもなければ
---阈值反取零(反転ゼロに閾値)
DST(X、Y)= 0 ifsrc(X、Y)> THRESH
= SRC(x、y)は、さもなければ
--- THRESH_BINARY値化閾値
DST(X、Y)= MAXVAL ifsrc(X、Y)> THRESH
= 0そうでなければ
--- THRESH_BINARY_INV逆値化閾値
DST(X、Y)= 0 ifsrc(x、y)は> THRESH
= MAXVALは、そうでなければ
--- THRESH_TRUNCが切り捨て
DST(X、Y)を=閾値ifsrc(X、Y)> THRESH
= SRC(X、Y)othrewise
--- THRESH_TOZEROはゼロ閾値取る
SRC(X、Y)ifsrc(X、Y)> THRESH = DST(X、Y)を
= 0さもなければ
--- THRESH_TOZERO_INVがゼロ閾値トランス取る
DST(X、Y)= 0 ifsrc(Xは、Y)> THRESH
= SRC(X、Y)、さもなければ
--- THRESH_MASK
--- THRESH_OTSUフラグ、最適な閾値を選択する大津アルゴリズムを使用
--- THRESH_TRIANGLEフラグを、最適な閾値を選択するトライアングル・アルゴリズムを使用
コードは示しています。
#include<opencv2/opencv.hpp>
#include<iostream>
#include<math.h>
using namespace cv;
Mat src,dst,gray_src;
int threshold_value = 127;
int threshold_max = 255;
int type_value = 2;
int type_max = 5;
const char* output_title = "binary image";
void Threshold_Demo(int,void*);
int main(int argc,char** argv){
src = imread("");
if(!src.data){
printf("could not load image...\n");
return -1;
}
namedWindow("input image",CV_WINDOW_AUTOSIZE);
namedWindow(output_title,CV_WINDOW_AUTOSIZE);
imshow("input image",src);
createTrackbar("THRESHOLD VALUE",output_title,&threshold_value,threshold_max,Threshold_Demo);
createTrackbar("Type Value",output_title,&type_value,type_max,Threshold_Demo);
Threshold_Demo(0,0);
while(true){
}
waitKey(0);
return -1;
}
void Threshold_Demo(int,void*){
cvtColor(src,gray_src,CV_BGR2GRAY);
printf("%d",THRESH_BINARY);
printf("%d",THRESH_BINARY_INY);
printf("%d",THRESH_TRUNC);
printf("%d",THRESH_THZERO);
printf("%d",THRESH_TOZERO_INY);
threshold(gray_src,dst,threshold_value,threshold_max,THRESH_BINARY);
//threshold(gray_src,dst,threshold_value,threshold_max,type_value);
//threshold(gray_src,dst,0,255,THRESH_OTSU | type_value);//自动计算阈值
//threshold(gray_src,dst,0,255,THRESH_TRIANGLE | type_value);//三角法找阈值
imshow(output_title,dst);
}
フィルタリング線形カスタム
の畳み込み概念
畳み込みは、画像処理動作の画像の各画素のオペレーティング・カーネルである
、本質的に固定サイズのマトリクスアレイカーネル、その中心点は、アンカー(アンカーポイント)と呼ばれています
どのようにコンボリューション仕事は
コンボリューションと呼ばれるアンカー・カバレッジ・プロセスの画素値を置き換えるために、周辺の画素のアンカー(アンカーポイント)の積の総和をカバーしようとしている、ピクセルアレイ上でカーネルに入れます。以下のように数学的に表現
H(X、Y)= EXP(Iは、MI- 0 = 1)EXP(J = 0、Mjのオブ1)[I(X + I-AI、Y + J-AJ)K(I 、J)]]
畳み込み効果
ボケ画像
エッジ抽出
画像鮮鋭化のための
一般的なオペレータ
ロバートオペレータ
X方向、Y方向
+ +1 + +1 0 0
0 -1 -1 0
ソーベル演算子
X方向、Y方向
-101-1-2-- 1
-2 0 2 0 0 0
-1 0 2 1 1 1
ラプラシアン
0 -1 0
-1 -1。4
0 -1 0
カスタム畳み込みファジィ
filter2D方法
filter2D(
マットSRC、//入力画像
マットDST、//ぼやけた画像
INT深さ、//画像奥行き8分の32
マットカーネル、//畳み込みカーネル/テンプレート
ポイントアンカー、//のアンカー位置
の画素+デルタダブルデルタ//計算
カーネルカスタマイズすることができるコンボリューションカーネル)
コードデモ:
#include<opencv2/opencv.hpp>
#include<iostream>
#include<math.h>
using namespace cv;
int main(int argc,char** argv){
Mat src,dest;
Mat kernel;
int ksize = 0;
src = imread("");
if(!src.data){
printf("could not load image...\n");
return -1;
}
char INPUT_WIN[] = "input image";
char OUTPUT_WIN[] = "result image";
namedWindow(INPUT_WIN,CV_WINDOW_AUTOSIZE);
namedWindow(OUTPUT_WIN,CV_WINDOW_AUTOSIZE);
imshow(INPUT_WIN,src);
//Robert算子 x方向
Mat kernel_x = (Mat_<int>(2,2)<<1,0,0,-1);
filter2D(src,dst,-1,kernel_x,Point(-1,-1),0.0);
//Robert算子 y方向
Mat kernel_y = (Mat_<int>(2,2)<<0,1,-1,0);
filter2D(src,dst,-1,kernel_y,Point(-1,-1),0.0);
waitKey(0);
return 0;
}