資源簡介
圖像顯著性FT模型的代碼,希望對(duì)你有幫助
代碼片段和文件信息
#include?
#include?
#include?
using?namespace?cv;
using?namespace?std;
void?BGR2Lab(Mat?srcImage?vector&?vlabImg);//BGR轉(zhuǎn)為Lab空間
void?GaussianSmooth(Mat&?singleImg);//高斯平滑
int?main()
{
Mat?srcImage?=?imread(“E:\\VS2010\\ScratchProject\\SalientDetection\\SalientDetectionFT\\10.jpg“);
Mat?srcImg(srcImage.size()CV_8UC3); //如果是灰度圖,則先轉(zhuǎn)換為3通道圖像
if(srcImage.channels()==1)
cvtColor(srcImagesrcImgCV_GRAY2BGR);
else
srcImg=srcImage.clone();
imshow(“原始圖像“??srcImg);?
//BGR轉(zhuǎn)為LAB通道
vector?vlabImg; //存放lab三通道的值
BGR2Lab(srcImgvlabImg);
//分別求LAB三通道的均值
vector?meanVal;
for(int?i?=?0;i {
Scalar?meanVals?=?mean(vlabImg[i]);
meanVal.push_back(meanVals.val[0]);?????????//求取LAB三通道的均值
}
//分別求LAB三通道的高斯濾波
GaussianSmooth(vlabImg[0]);
GaussianSmooth(vlabImg[1]);
GaussianSmooth(vlabImg[2]);
//求取顯著圖
Mat?tempImg(srcImg.size()CV_64FC1Scalar::all(meanVal[0]));
absdiff(vlabImg[0]meanVal[0]vlabImg[0]); //L通道的?|均值-高斯濾波|
pow(vlabImg[0]2vlabImg[0]); //對(duì)以上結(jié)果求平方根
tempImg.setTo(meanVal[1]);
absdiff(vlabImg[1]meanVal[1]vlabImg[1]);
pow(vlabImg[1]2vlabImg[1]);
tempImg.setTo(meanVal[2]);
absdiff(vlabImg[2]meanVal[2]vlabImg[2]);
pow(vlabImg[2]2vlabImg[2]);
Mat?salientMap(srcImg.size()CV_64FC1Scalar::all(0));
add(vlabImg[0]vlabImg[1]salientMap);
add(vlabImg[2]salientMapsalientMap);
//歸一化
normalize(salientMapsalientMap10CV_MINMAX);?
//double型圖像轉(zhuǎn)為uchar型圖像
Mat?salientImg(srcImg.size()CV_8UC1Scalar::all(0));
salientMap.convertTo(salientImgCV_8UC12550);
imshow(“salientImg“salientImg);
waitKey(0);
return?0;
}
void?BGR2Lab(Mat?srcImg?vector&?vlabImg)//BGR轉(zhuǎn)為Lab空間
{
Mat?initImg(srcImg.size()CV_64FC1Scalar::all(0));
for(int?i?=?0;?i {
vlabImg.push_back(initImg);//初始化vlabImg分別存放L?A?B?
}
Mat?LImg(srcImg.size()CV_64FC1Scalar::all(0));
Mat?AImg(srcImg.size()CV_64FC1Scalar::all(0));
Mat?BImg(srcImg.size()CV_64FC1Scalar::all(0));
for(int?i?=?0;?i? {
for(int?j?=?0;?j? {
int?sB?=?(int)srcImg.at(ij)[0];
int?sG?=?(int)srcImg.at(ij)[1];
int?sR?=?(int)srcImg.at(ij)[2];
//------------------------
//?sRGB?to?XYZ?conversion
//?(D65?illuminant?assumption)
//------------------------
double?R?=?(double)sR/255.0;
double?G?=?(double)sG/255.0;
double?B?=?(double)sB/255.0;
double?r?g?b;
if(R?<=?0.04045) r?=?(double)R/12.92;
else r?=?pow((R+0.055)/1.0552.4);
if(G?<=?0.04045) g?=?(double)G/12.92;
else g?=?pow((G+0.055)/1.0552.4);
if(B?<=?0.04045) b?=?(double)B/12.92;
else b?=?pow((B+0.055)/1.0552.4)
評(píng)論
共有 條評(píng)論