PIXNET Logo登入

Lung-Yu,Tsai 的部落格

跳到主文

  • Author Personal website
  • Tygr portfolio
  • Technology Record and Shared Space

部落格全站分類:數位生活

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 10月 03 週二 201709:48
  • C# 畫直方圖


在對影像分析時會需要知道影像像數值的分布狀況,可以透過直方圖進行分析。
以下是將影像R、G、B分別進行統計後繪出各自顏色的分布。
(繼續閱讀...)
文章標籤

Lung-Yu,Tsai 發表在 痞客邦 留言(0) 人氣(2,997)

  • 個人分類:Image-Processing
▲top
  • 8月 15 週二 201713:25
  • Open CV - Match Template



 
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
/// 宣告全域變數
Mat img; Mat templ; Mat result;
const char* image_window = "Source Image";
const char* result_window = "Result window";
int match_method;
// 拉桿最大值
int max_Trackbar = 5;
/// 宣告函式
void MatchingMethod(int, void*);
int main(int argc, char ** argv){
/// 載入圖檔
img = imread("C:\\images\\lena.jpg", 1);
imshow("Lena", img);
// 載入範本
templ = imread("C:\\images\\crop-lena.jpg", 1);
imshow("Crop-Lena", templ);
/// 建立視窗
namedWindow(image_window, WINDOW_AUTOSIZE);
namedWindow(result_window, WINDOW_AUTOSIZE);
/// 建立拉桿
// 0: SQDIFF 1: SQDIFF NORMED 2: TM CCORR
// 3: TM CCORR NORMED 4: TM COEFF 5: TM COEFF NORMED
const char* trackbar_label = "Method: ";
createTrackbar(trackbar_label, image_window,
&match_method, max_Trackbar, MatchingMethod);
// 比對
MatchingMethod(0, 0);
waitKey(0);
return 0;
}
// 因為要傳參數但又用不到
void MatchingMethod(int, void*)
{
/// 複製原圖
Mat img_display;
img.copyTo(img_display);
/// 建立結果矩陣
int result_cols = img.cols - templ.cols + 1;
int result_rows = img.rows - templ.rows + 1;
result.create(result_cols, result_rows, CV_32FC1);
  /// 執行比對與正規化
  matchTemplate(img, templ, result, match_method);
  normalize(result, result, 0, 1, NORM_MINMAX, -1, Mat());
  double minVal, maxVal;
  Point minLoc, maxLoc, matchLoc;
  /// 尋找圖中最大與最小的位置
  minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc, Mat());
  /// 用 SQDIFF 與 SQDIFF_NORMED是越低值比較結果越好
  /// 其它方法是越高越好試
  if (match_method == CV_TM_SQDIFF || match_method == CV_TM_SQDIFF_NORMED)
  {
    matchLoc = minLoc;
  }
  else
{
     matchLoc = maxLoc;
  }
  // 繪比對結果範圍
// 原圖
  rectangle(img_display, matchLoc,
      Point(matchLoc.x + templ.cols, matchLoc.y + templ.rows),
      Scalar::all(0), 2, 8, 0);
  // 正規化結果
  rectangle(result, matchLoc,
      Point(matchLoc.x + templ.cols, matchLoc.y + templ.rows),
      Scalar::all(0), 2, 8, 0);
 /// 顯示結果
  imshow(image_window, img_display);
  imshow(result_window, result);
return;
}
(繼續閱讀...)
文章標籤

Lung-Yu,Tsai 發表在 痞客邦 留言(0) 人氣(175)

  • 個人分類:Image-Processing
▲top
  • 8月 15 週二 201713:20
  • Open CV - Sobel



 
#include <opencv2/opencv.hpp>
using namespace std;
int main(){
/// 傾斜度 (Gradient) X
/*
Scharr( src_gray, grad_x, ddepth, 1, 0,
scale, delta, BORDER_DEFAULT );
*/
Sobel(src_gray, grad_x, ddepth, 1, 0, 3,
scale, delta, BORDER_DEFAULT);
/// 轉成絕對值8位元影像
convertScaleAbs(grad_x, abs_grad_x);
/// 傾斜度 Y
/*
Scharr( src_gray, grad_y, ddepth, 0, 1,
scale, delta, BORDER_DEFAULT );
*/
Sobel(src_gray, grad_y, ddepth, 0, 1, 3,
scale, delta, BORDER_DEFAULT);
convertScaleAbs(grad_y, abs_grad_y);
/// 總傾斜度 (大約的)
addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, grad);
imshow(window_name, grad);
waitKey(0);
return EXIT_SUCCESS;
|
(繼續閱讀...)
文章標籤

Lung-Yu,Tsai 發表在 痞客邦 留言(0) 人氣(94)

  • 個人分類:Image-Processing
▲top
  • 8月 15 週二 201713:16
  • Open CV - Equalize hist



#include <opencv2/opencv.hpp>
using namespace std;
int main(){
Mat src, dst;
const char* source_window = "Source image";
const char* equalized_window = "Equalized Image";
/// 載入圖檔
src = imread("C:\\images\\lena.jpg", 1);
if (!src.data)
return -1;
/// 轉成灰階
cvtColor(src, src, COLOR_BGR2GRAY);
/// 使用色階分佈圖 (Histogram) 等化(Equalization)
equalizeHist(src, dst);
/// 顯示結果
namedWindow(source_window, WINDOW_AUTOSIZE);
namedWindow(equalized_window, WINDOW_AUTOSIZE);
imshow(source_window, src);
imshow(equalized_window, dst);
waitKey();
return EXIT_SUCCESS;
|
(繼續閱讀...)
文章標籤

Lung-Yu,Tsai 發表在 痞客邦 留言(0) 人氣(41)

  • 個人分類:Image-Processing
▲top
  • 8月 15 週二 201713:11
  • Open CV - Discrete Fourier Transform



 
#include <opencv2/opencv.hpp>
using namespace std;
int main(){
const char* filename = "C:\\images\\lena.jpg";
Mat I = imread(filename, CV_LOAD_IMAGE_GRAYSCALE);
if (I.empty())
return -1;
Mat padded;
// 擴張圖到理想的大小
int m = getOptimalDFTSize(I.rows);
int n = getOptimalDFTSize(I.cols);
// 在圖邊補 0 值
copyMakeBorder(I, padded, 0, m - I.rows, 0,
n - I.cols, BORDER_CONSTANT, Scalar::all(0));
Mat planes[] = { Mat_<float>(padded),
Mat::zeros(padded.size(), CV_32F) };
Mat complexI;
// 用0加到另一個擴增面
merge(planes, 2, complexI);
// 將結果大小與原圖穩合
dft(complexI, complexI);
// 計算擴增值病患成對數的刻度
// => log(1 + sqrt(Re(DFT(I))^2 + Im(DFT(I))^2))
// planes[0] = Re(DFT(I), planes[1] = Im(DFT(I))
split(complexI, planes);
// planes[0] = magnitude
magnitude(planes[0], planes[1], planes[0]);
Mat magI = planes[0];
// 換成對數的刻度
magI += Scalar::all(1);
log(magI, magI);
// 如果有奇數的行或列就修剪光譜 (spectrum)
magI = magI(Rect(0, 0, magI.cols & -2, magI.rows & -2));
// 安排傅立葉圖的四象區塊(quadrants)
// 如此原點在圖的中間
int cx = magI.cols / 2;
int cy = magI.rows / 2;
// 左上 - 每區都產生圖塊
Mat q0(magI, Rect(0, 0, cx, cy));
// 右上
Mat q1(magI, Rect(cx, 0, cx, cy));
// 左下
Mat q2(magI, Rect(0, cy, cx, cy));
// 右下
Mat q3(magI, Rect(cx, cy, cx, cy));
Mat tmp;
// 四象區塊左上與右下對調
q0.copyTo(tmp);
q3.copyTo(q0);
tmp.copyTo(q3);
// 四象區塊右上與左下對調
q1.copyTo(tmp);
q2.copyTo(q1);
tmp.copyTo(q2);
// 以浮點值(0與1之間)轉換圖像到可見的圖 into a
normalize(magI, magI, 0, 1, CV_MINMAX);
// Show the result
imshow("Input Image", I);
imshow("spectrum magnitude", magI);
waitKey(0);
|
(繼續閱讀...)
文章標籤

Lung-Yu,Tsai 發表在 痞客邦 留言(0) 人氣(107)

  • 個人分類:Image-Processing
▲top
  • 8月 15 週二 201713:09
  • Open CV - 顯示圖片



 
#include <opencv2/opencv.hpp>
using namespace std;
int main(){
char filename[] = "D://images.jpg"; // 想要取得的影像名稱
IplImage *image; // 影像的資料結構
// 讀取影像的資料結構
image = cvLoadImage(filename, CV_LOAD_IMAGE_UNCHANGED);
if (!image){
cout << "Error: Couldn't open the image file.\n";
}
cvShowImage("HelloWorld", image); // 顯示影像於視窗
cvWaitKey(0); // 停留視窗
cvDestroyWindow("HelloWorld"); // 銷毀視窗
cvReleaseImage(&image); // 釋放IplImage資料結構
return EXIT_SUCCESS;
}
(繼續閱讀...)
文章標籤

Lung-Yu,Tsai 發表在 痞客邦 留言(0) 人氣(84)

  • 個人分類:Image-Processing
▲top
  • 6月 22 週四 201701:17
  • Image Processing - Power-Law Transform


由下圖可見Power-Law相較於log的轉換幅度較小,因此若資料不須不如log如此敏感之轉換曲線時可採用Power-Law。其轉換公式如下。
(繼續閱讀...)
文章標籤

Lung-Yu,Tsai 發表在 痞客邦 留言(0) 人氣(1,124)

  • 個人分類:Image-Processing
▲top
  • 6月 22 週四 201701:12
  • Image Processing - Prewitt Edge Detection


Prewitt也是透過兩個不同的遮罩分別找到垂直邊緣與水平邊緣後,將遮罩與套入即可求得影像邊緣。
 
(繼續閱讀...)
文章標籤

Lung-Yu,Tsai 發表在 痞客邦 留言(0) 人氣(577)

  • 個人分類:Image-Processing
▲top
  • 6月 22 週四 201700:53
  • 影像垂直/水平投影分析


在影像分析之中常見的分析手法是透過投影(projection)後找到最適合的分割點,進而成功取得感興趣的區域。
其方法是透過統計垂直/水平 上所有的像素點。
(繼續閱讀...)
文章標籤

Lung-Yu,Tsai 發表在 痞客邦 留言(0) 人氣(1,236)

  • 個人分類:Image-Processing
▲top
  • 5月 01 週一 201717:30
  • 2D 影像進行 Discrete Fourier Transform

undefined
傅立葉轉換主要是將時域空間的資訊轉換為頻域空間的資訊。
傅立葉轉換圖解可參照下圖(引用維基百科)。
(繼續閱讀...)
文章標籤

Lung-Yu,Tsai 發表在 痞客邦 留言(0) 人氣(5,994)

  • 個人分類:Image-Processing
▲top
123»

個人資訊

Lung-Yu,Tsai
暱稱:
Lung-Yu,Tsai
分類:
數位生活
好友:
累積中
地區:

文章搜尋

文章分類

toggle Revit 二次開發 (2)
  • Application (4)
  • Command (4)
toggle Security (1)
  • Web Pentester (20)
toggle Program (13)
  • R (3)
  • golang (1)
  • Web front end (1)
  • SQL (1)
  • Python (13)
  • exam (13)
  • nodejs (1)
  • js (7)
  • Java (18)
  • C/C++ (11)
  • cuda (1)
  • .NET (20)
  • Android (16)
toggle Machine Learing (11)
  • Features (1)
  • Neural Network (1)
  • Instance based (1)
  • Regression (1)
  • pre-process (3)
  • analysis (1)
  • Bayes' theorem (1)
  • Tensorflow (6)
  • Clustering (1)
  • Dimensions reduction (1)
  • Association Analysis (1)
toggle Infrastructure (5)
  • Ubuntu (10)
  • Spark (2)
  • Windows (4)
  • Gitlab (4)
  • Docker (5)
toggle Software Engineering (2)
  • UML (2)
  • Design Pattern (3)
  • numerical_analysis (1)
  • Image-Processing (22)
  • 未分類文章 (1)

熱門文章

  • (10,233)Image Processing - 中值濾波(Median Filter)
  • (8,037)Image Processing - Sobel 邊緣偵測
  • (5,994)2D 影像進行 Discrete Fourier Transform
  • (3,854)Image Processing - 均值濾波(Mean Filter)
  • (3,818)Image Processing - 8 Bit plane slicing
  • (3,502)error MSB8020
  • (2,834)Image Processing - Laplacian 邊緣偵測
  • (2,365)Image Processing - Log Transform
  • (2,002)Image Processing - Binary Thresholding(二值化)
  • (79)Android 發送 簡訊 (SMS)

最新文章

  • [Patch]-CVE-2022-22965
  • [Python] 使用gmail寄信並夾帶附件
  • [Python] 使用outlook寄信並夾帶附件
  • Java Spring-產生Excel( .xlsx)
  • [win] 遺失VCRUNTIME140_1.dll 解決方法
  • [SQL]針對特定條件進行加總、計數、平均等計算
  • [Web Front End] sweetalert2 彈出提示 Dialog
  • [golang] 目錄夾遍訪
  • [C++] IniHelper
  • [C#] IniHelper

文章精選

最新留言

  • [22/08/28] 訪客 於文章「[python] 混淆矩陣分析圖...」留言:
    請問m放mask rcnn訓練後的模型(.h5檔)是可行的嗎...
  • [22/04/16] 訪客 於文章「[win] 遺失MSVCP140.dll...」留言:
    回饋您這方面資訊,我是從 PTT搜尋引擎的排名,看...
  • [22/01/09] Yu 於文章「[python] 混淆矩陣分析圖...」留言:
    m表示要測試的模型檔案 請問可以看m檔案是甚麼嗎...
  • [20/10/21] Patrick 於文章「Android 利用 tesseract...」留言:
    請問一下,如何將TESSBASE_PATH改成內部儲存的路徑...
  • [19/10/18] 林宛萱 於文章「Android 利用 tesseract...」留言:
    喔 我做出來了 謝謝你^ ^...
  • [19/10/01] 林宛萱 於文章「Android 利用 tesseract...」留言:
    為甚麼我全都照上面的步驟做了一開啟app卻還是閃退呢? ...
  • [19/09/25] 林宛萱 於文章「Android 利用 tesseract...」留言:
    想請問步驟4.的宣告tesseract的辨識模型的位置與要使...
  • [19/08/10] Z 於文章「Android 利用 tesseract...」留言:
    我後來不知道為什麼就成功了XD 謝謝囉~...
  • [19/08/08] Z 於文章「Android 利用 tesseract...」留言:
    想再請問, "1. 載入相依套件(tesseract...
  • [19/08/06] Z 於文章「Android 利用 tesseract...」留言:
    有一些問題想請問: 1. "辨識用模型"下載完要放在專...

誰來我家

參觀人氣

  • 本日人氣:
  • 累積人氣:

留言板