資源簡(jiǎn)介
適用于vs2010的圖像處理算法,包括SSR,MSR,MSRCR等retinex改進(jìn)算法,方便大家學(xué)習(xí)交流和項(xiàng)目開(kāi)發(fā),有問(wèn)題請(qǐng)隨時(shí)提問(wèn)。
。
代碼片段和文件信息
#include?“MSRCR.h“
/*===========================================================
?*?函數(shù):?CreateKernel
?*?說(shuō)明:創(chuàng)建一個(gè)標(biāo)準(zhǔn)化的一維高斯核;
?*?參數(shù):
?*???double?sigma:?高斯核標(biāo)準(zhǔn)偏差
?*?返回值:
?*???double*:?長(zhǎng)度為((6*sigma)/2)?*?2?+?1的double數(shù)組
?*?注:
?*???調(diào)用者需要?jiǎng)h除該內(nèi)核;
?*?--------------------------------------------------------
?*??Summary:
?*??Creates?a?normalized?1?dimensional?gaussian?kernel.
?*
?*??Arguments:
?*??double?sigma?-?the?standard?deviation?of?the?gaussian?kernel.
?*
?*??Returns:
?*??vector?-?an?vector?of?values?of?length?((6*sigma)/2)?*?2?+?1.
?*??Note:
?*??Caller?is?responsable?for?deleting?the?kernel.
=============================================================
?*/
vector?Msrcr::CreateKernel(double?sigma)
{
int?i?x?filter_size;
????vector?filter;
double?sum;
????//?set?sigma‘s?upline
????//?為sigma設(shè)定上限
????if?(?sigma?>?300?)?sigma?=?300;
????//?get?needed?filter?size?(enforce?oddness)
????//?獲取需要的濾波尺寸,且強(qiáng)制為奇數(shù);
filter_size?=?(int)floor(sigma*6)?/?2;
filter_size?=?filter_size?*?2?+?1;
//?Calculate?exponential
????//?計(jì)算指數(shù)
sum?=?0;
????for?(i?=?0;?i?????{
????????double?tmpValue;
????????x?=?i?-?(filter_size?/?2);
????????tmpValue?=?exp(?-(x*x)?/?(2*sigma*sigma)?);
????????filter.push_back(tmpValue);
????????sum?+=?tmpValue;
}
//?Normalize
????//?歸一化計(jì)算
for?(i?=?0?x;?i?????????filter[i]?/=?sum;
return?filter;
}
/*===========================================================
?*?函數(shù):?CreateFastKernel
?*?說(shuō)明:創(chuàng)建一個(gè)近似浮點(diǎn)的整數(shù)類型(左移8bits)的快速高斯核;
?*?參數(shù):
?*???double?sigma:?高斯核標(biāo)準(zhǔn)偏差
?*?返回值:
?*???double*:?長(zhǎng)度為((6*sigma)/2)?*?2?+?1的int數(shù)組
?*?注:
?*???調(diào)用者需要?jiǎng)h除該內(nèi)核;
?*?--------------------------------------------------------
?*?Summary:
?*?Creates?a?faster?gaussian?kernal?using?integers?that
?*?approximate?floating?point?(leftshifted?by?8?bits)
?*
?*?Arguments:
?*?double?sigma?-?the?standard?deviation?of?the?gaussian?kernel.
?*
?*?Returns:
?*?vector?-?an?vector?of?values?of?length?((6*sigma)/2)?*?2?+?1.
?*
?*?Note:
?*?Caller?is?responsable?for?deleting?the?kernel.
=============================================================
?*/
vector?Msrcr::CreateFastKernel(double?sigma)
{
????vector?fp_kernel;
????vector?kernel;
int?i?filter_size;
//?Reject?unreasonable?demands
????//?設(shè)置上限
????if?(?sigma?>?300?)?sigma?=?300;
//?get?needed?filter?size?(enforce?oddness)
????//?獲取需要的濾波尺寸,且強(qiáng)制為奇數(shù);
filter_size?=?(int)floor(sigma*6)?/?2;
filter_size?=?filter_size?*?2?+?1;
????//?Create?Kernel
????//?創(chuàng)建內(nèi)核
fp_kernel?=?CreateKernel(sigma);
????//?Change?kernel‘s?data?type?from?double?to?int
????//?double內(nèi)核轉(zhuǎn)為int型
for?(i?=?0;?i?????{
????????int?tmpValue;
????????tmpValue?=?double2int(fp_kernel[i]);
????????kernel.push_back(tmpValue);
????}
return?kernel;
}
/*===========================================================
?*?函數(shù):FilterGaussian
?*?說(shuō)明:通過(guò)內(nèi)核計(jì)算高斯卷積,內(nèi)核由sigma值得到,且在內(nèi)核兩端值相等;
?*?參數(shù):
?*???img:?被濾波的IplImage*類型圖像
?*???double?sigma:?高斯核標(biāo)準(zhǔn)偏差
?*?-----------------------------------------
評(píng)論
共有 條評(píng)論