在做影像辨識時候,為了要排除因為光線產生的色差
造成辨識率降低
常會把影像轉換為灰階影像進行辨識
但若影像的光源影響太大
(所謂影響太大就是拍出的影像有可能一下子很亮、一下子很暗)
直接將影像轉灰階
還是沒辦法避免影像的光源影響辨識率
遇到這種情況
通常會將影像作直方圖等化(之後再補上何謂直方圖等化...)
這樣就可以把影像過度集中太亮或太暗的問題排除掉
原生matlab code:
function [result]=funHisteq(SourceFileName,ResultFileName)
Pic_Source=imread(SourceFileName);
PicGray=rgb2gray(Pic_Source);
PicHist=histeq(PicGray);
imwrite(PicHist,ResultFileName);
result=ResultFileName;
Pic_Source=imread(SourceFileName);
PicGray=rgb2gray(Pic_Source);
PicHist=histeq(PicGray);
imwrite(PicHist,ResultFileName);
result=ResultFileName;
編譯成.Net元件 --> HistEQ
用.net載入測試...
記得要引用進來
using HistEQ;
using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;
using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;
程式碼:
HistEQ.ConvertHisteq obj = new HistEQ.ConvertHisteq();
MWArray result = obj.funHisteq((MWArray)"D:\\Google 雲端硬碟\\Personal\\ProgramDesign\\Matlab\\histeq\\darker.jpg", (MWArray)"D:\\Google 雲端硬碟\\Personal\\ProgramDesign\\Matlab\\histeq\\darker_Result.bmp");
MessageBox.Show(result.ToString());
MWArray result = obj.funHisteq((MWArray)"D:\\Google 雲端硬碟\\Personal\\ProgramDesign\\Matlab\\histeq\\darker.jpg", (MWArray)"D:\\Google 雲端硬碟\\Personal\\ProgramDesign\\Matlab\\histeq\\darker_Result.bmp");
MessageBox.Show(result.ToString());
輸入參數1為原始影像檔案
輸入參數2為要輸出的結果影像檔案路徑+檔案名稱
回傳的輸出結果為影像檔案路徑+檔案名稱
以下附上幾張測試的影像例子
原始圖 | Histogram Equalization |
大家可以看到右邊做完直方圖等化的影像,明顯穩定許多
不會被光源影響太多了
提供大家參考
沒有留言:
張貼留言