搜尋此網誌

2015年10月16日 星期五

利用matlab轉換影像HSV值

在處理影像時候常會用到HSV來達到一些需求
這裡就實作用matlab裡面的rgb2hsv的function來實作
然後把code轉編譯成其他語言可引用的元件


matlab的原生碼如下:
function result=funHSV(SourceFileName,Types)
Pic_O=imread(SourceFileName);
HSV=rgb2hsv(Pic_O);
% h=HSV(:,:,1);
% s=HSV(:,:,2);
% v=HSV(:,:,3);
result=HSV(:,:,Types);
SourceFileName為要處理的原始影像(包含路徑)
Types為要回傳的種類
1代表h-色相
2代表s-飽和度
3代表v-亮度

回傳值的範圍為 0~1
其中h的色相為0~360度,所以要在乘上360才會是色相分布的角度喔

這裡實作用.Net來舉例
如何呼叫並且回傳
要引用的元件
using HSV;
using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;

以下測試輸入darker.jpg,並且要求回傳h-色相的值
原始影像為600*800

HSV.ConvertHSV obj = new HSV.ConvertHSV();
          MWNumericArray result = (MWNumericArray)obj.funHSV("D:\\Google 雲端硬碟\\Personal\\ProgramDesign\\Matlab\\histeq\\darker.jpg", 1);
//回傳為一個800*600的矩陣          
double[,] native1 = (double[,])result.ToArray(MWArrayComponent.Real);

//代表的是每個Pixel經過HSV轉換後所得到的H值
MessageBox.Show(native1[799, 599].ToString());

有需要各式語言的人跟我說
我在轉換編譯成可以支援該語言的元件喔
希望對大家有幫助

沒有留言:

張貼留言