Learn CV

date
Jun 1, 2022
slug
learn_cv
status
Published
tags
Website
summary
type
Post
re
Research
4.13
 
imread()を使用するためには、ファイルのパスを入力してNumpyのndarrayオブジェクトへの変換が必要です。注意点として、imread()はPythonの組込メソッドではなく、外部のモジュール(ライブラリ)内のメソッドです。
 
 
matplotlib.pyplot matplotlib のグラフ描写モジュール(本体)
matplotlib.pylab グラフ描写に必用な matplotlib.pyplotやmatplotlib.mlabおよびにnumpyの各種モジュール、datetimeなどを同一名前空間に一括でimportするための"便利"モジュール
様々なモジュールを同一名前空間上に展開してしまうため、実際にその関数がどのモジュールに実装されているかを解り難くしてしまい
matplotlib.pylab グラフ描写に必用な matplotlib.pyplotやmatplotlib.mlabおよびにnumpyの各種モジュール、datetimeなどを同一名前空間に一括でimportするための"便利"モジュール
様々なモジュールを同一名前空間上に展開してしまうため、実際にその関数がどのモジュールに実装されているかを解り難くしてしまい
 
imshow: 1つは画像ファイルをそのまま引数にし、もう1つは画像ファイルを配列の形にしてから引数に渡している。
 
binsビン (表示する棒) の数。階級数。(デフォルト値: 10)
 
hist: Matplotlibでヒストグラムを描く
ヒストグラムは、1つ、または複数のRGB(赤/緑/青)チャネルの255の輝度レベル(0(黒)から127/128(ニュートラルグレー)から255(白)まで)を示すグラフです。
 
4/28
OpenCV で読み込んだ画像は BGR の順,matplotlib の画像は RGB の順なので,そのまま matplotlib で表示すると色がおかしくなる。
 
5/7
 
5/8
スパースモデリングに基づく画像の再構成 Part1. L1ノルム最小化に基づく画像再構成の実装
この記事では,L1ノルム正則化の最小化の実装を行い,ノイズを含む画像がどのように再構成されるのか,確かめてみます. なお,Total Variation はスパースモデリングで主に使われている技術です. 画像処理におけるスパースモデリング 画像のスパースモデリングとは スパース:「疎ら」 なモデリングを行う,ということです.このようなスパースモデリングは,画像処理にとどまらずノイズ除去や,領域のセグメンテーションなどに用いられています. ここでは,画像処理において,スパースモデリングとはどういうことを意味するのか,pythonを用いてコーディングを行います. 1. L1 正則化に基づく画像の再構成 L1画像の再構成では,具体的に以下のような評価関数の最小化を考えます. Input の画像から Outputの画像に変換します. \begin{align} F = \frac{1}{2} |I_{input} - I_{output}|^2 + \lambda |I_{output}|_{1} \end{align} この評価関数の第一項目は入力画像と出力画像の2乗誤差です.これは,Input画像とOutput画像が明らかに違うようなものは求めてない,ということです. 大事なのは第二項目です.この項は$I_{input}$のL1ノルムに対応します.L1ノルムの最小化はスパースな解,つまり要素として0を多く含む解が得られるようになります.今回の場合,$I_{output}$のL1ノルムの最小化を行っているので,$I_{output}$の画素の多くが0になるような Output を得ることができます. なお,0ではなく別の値$A$の値をスパースにしたいときなどは,上の評価関数を \begin{align} F = \frac{1}{2} |I_{input} - I_{output}|^2 + \lambda |I_{output} - A|_{1} \end{align} とすることで解決できます.上のように,バックグラウンドの値は白なので,GrayScale の画像では$A=255$とする必要がありますね. 2.
スパースモデリングに基づく画像の再構成 Part1. L1ノルム最小化に基づく画像再構成の実装
 
5/13
 
5/19
图像算法:Difference of Gaussian(DOG) 高斯函数差分 - 程序员大本营
Difference of Gaussian(DOG) 是高斯函数的差分。 它是可以通过将图像与高斯函数进行卷积得到一幅图像的低通滤波结果,即去噪过程, 这里的Gaussian和高斯低通滤波器的高斯一样,是一个函数,即为正态分布函数。 同时,它对高斯拉普拉斯LoG的近似,在某一尺度上的特征检测可以通过对两个相邻高斯尺度空间的图像相减,得到DoG的响应值图像。 其次,两幅图像的高斯滤波表示为: 最后,将上面滤波得到的两幅图像g1和g2相减得到: 即:可以DOG表示为: 在具体图像处理中,就是将两幅图像在不同参数下的高斯滤波结果相减,得到DoG图。具体步骤如下所示: 第一步,计算不同参数下的DOG ; 在图1,图2,图3,三种图像给了不同参数下的高斯滤波输出的效果,如下图所示: 图1:一个高斯平滑参数为0.3,另一个高斯平滑参数为0.4 图2:一个高斯平滑参数为0.6,另一个高斯平滑参数为0.7 图3 :一个高斯平滑参数为0.7,另一个高斯平滑参数为0.8 第二步,根据DOG,求角点。 根据理论:三维图中的最大值和最小值点是角点,如图所示: 标记红色当前像素点,绿色的圈标记邻接像素点,用这个方式,最多检测相邻尺度的26个像素点。如果它是所有邻接像素点的最大值或最小值点,则标记红色被标记为特征点,如此依次进行,则可以完成图像的特征点提取。 因此在第一步后,我们可以计算出的图1,图2,图3三个DOG图中求图2中是极值的点,如下图所示: 图5:黑色为极小值,白色为极大值 因此,原始图像上以显示的DOG角点检测结果,如下图所示: 参考资料 [1] Difference of Gaussian(DOG) http://fourier.eng.hmc.edu/e161/lectures/gradient/node10.html. [2] Difference of Gaussian From Wikipedia, the free encyclopedia. [3] Rafael C.Gonzalez, Rechard E.Woods at. el , "Digital Image Processing Using MatLab (Second Editon)",Gatesamark Publishing.
图像算法:Difference of Gaussian(DOG) 高斯函数差分 - 程序员大本营
 
5/24
【Python】OpenCVで特徴量マッチング - ORB, SIFT, FLANN
OpenCVを使ったPythonでの画像処理について、画像認識について扱っていきましょう。 これまでに、静止画から物体を認識をする方法としてテンプレートマッチングという手法をすでに扱いました。 これは、静止画像の一部分をテンプレート画像として利用し、それに一致する部分を静止画像から検出するのものでした。この手法は同じ画像を材料にしている為に、柔軟性のある方法ではありませんでした。 そこで、ここでは二枚目の画像中の特徴点の特徴量に基づいてマッチングする方法(特徴点マッチング、特徴量マッチング)を見て行こうと思います。 まず、マッチングさせる2つの画像をjupyter notebookで読み込んで行きます。 ライブラリのインポートから始めましょう。 import cv2 import numpy as np import matplotlib.pyplot as plt %matplotlib inline OpenCV、NumPy、Matplotlibをインポートしています。これはいつもの通りです。 画像の表示を関数としてまとめておきます。 def display(img,cmap='gray'): fig = plt.figure(figsize=(12,10)) ax = fig.add_subplot(111) ax.imshow(img,cmap='gray') display()関数を定義し、画像をわたし、グレースケールで表示するようにします。figure()で表示サイズを指定して、add_subplot()で画像を配置し、imshow()で表示します。 hacker = cv2.imread('images/book.jpg',0) imread()で画像を読み込みます。こちらは、まず1つ目の画像です。 先ほど定義した関数に渡して、画像を表示します。 ポール・グレアムの有名な本の表示の画像をここでは用意してみました。 もう一つ画像を用意します。 items = cv2.imread('images/books.jpg',0) display(items) こちらもグレースケールで読み込んで表示します。 複数の本を適当に並べた画像を用意しました。この中に、先ほど表示したポール・グレアムの本も含まれていることを確認してください。 このナチュラルに並べた物体の中から、目的の画像を検出するのがここで行う特徴量マッチングです。テンプレートマッチングで使用した画像との違いですね。 まず、総当たりマッチング(Brute-Force matcher)を扱ってみます。 総当たりマッチングは、一つ目の画像の中のある特徴点の特徴量記述子を計算し、もう一つの画像の中にある全特徴点の特徴量から、ある距離計算に基づいてマッチングを行います。最も距離が小さい特徴点が対応する部分がマッチング結果として得られます。 次のようなコードになります。 orb = cv2.ORB_create() kp1, des1 = orb.detectAndCompute(hacker,None) kp2, des2 = orb.detectAndCompute(items,None) bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True) matches = bf.match(des1,des2) matches = sorted(matches, key = lambda x:x.distance) hacker_matches = cv2.drawMatches(hacker,kp1,items,kp2,matches[:25],None,flags=2) まず、cv2.ORB_create()でORB抽出器を初期化します。 これを使って画像のキーポイントと記述子を見つけていきます。detectAndCompute()の第1引数は特徴点を抽出する画像、第2引数は特徴点を抽出する領域を選択するマスクを指定しますが、ここではNoneを指定し画像全体から特徴点を抽出します。2つの画像の特徴的な点の位置(kp1, kp2)、特徴を現すベクトル(des1, des2)をそれぞれ返します。 特徴点を全て比較するBFMatcher()をオブジェクト化します。 マッチングの計算に使う距離計算方法を1つ目のパラメータに指定します。デフォルトは cv2.NORM_L2 となっていて、SIFTやSURFといった特徴量記述子に向いています(cv2.NORM_L1 も同様)が、ここではORB(特徴ベクトルの各要素が2値となる特徴量記述子:ORB, BRIEF ...
【Python】OpenCVで特徴量マッチング - ORB, SIFT, FLANN

© Yang 2021 - 2024