資源簡介
國外大牛寫的Retinex圖像處理,可用于圖像增強,去霧等應(yīng)用。

代碼片段和文件信息
#include?“l(fā)um_retinex.h“
#include?
#include?
#include?
namespace?lum?{
????//?timing?helper
double?get_s()?{
using?namespace?std::chrono;
auto?now?=?system_clock::now();
system_clock::duration?tse?=?now.time_since_epoch();
return?duration_cast(tse).count()?/?1e9;
}
????//?Helper?image?processing?routines
void?log(const?float*?inimg?float*?outimg?int?sz)?{
#ifdef?USE_MKL
vsLn(sz?inimg?outimg);
#else
for?(int?i?=?0;?i? float?in?=?inimg[i];
outimg[i]?=?std::logf(inimg[i]?+?0.00001);
}
#endif
}
void?exp(const?float*?inimg?float*?outimg?int?sz)?{
#ifdef?USE_MKL
vsExp(sz?inimg?outimg);
#else
for?(int?i?=?0;?i? outimg[i]?=?std::expf(inimg[i]);
}
#endif
}
void?mean(const?float*?inimg?float*?outimg?int?outsz)?{
for?(int?i?=?0;?i? outimg[i]?=?(inimg[i?*?3]?+?inimg[i?*?3?+?1]?+?inimg[i?*?3?+?2])?/?3;
}
}
//?helpers?for?image?indices
class?reflshadidx?{
public:
reflshadidx(int?w?int?h)
:m_w(w)?m_h(h){}
int?reflidx(int?x?int?y)?const?{
return?m_w?*?y?+?x;
}
int?shadidx(int?x?int?y)?const?{
return?m_w?*?m_h?+?reflidx(x?y);
}
private:
int?m_w;
int?m_h;
};
class?imwrap?{
public:
imwrap(const?float*?img?int?w?int?h)
:m_w(w)?m_h(h)?m_img(img){?}
float?operator()(int?x?int?y)?const?{
assert(x?>=?0);
assert(y?>=?0);
assert(x? assert(y? return?m_img[m_w?*?y?+?x];
}
private:
const?float*?m_img;
int?m_w;
int?m_h;
};
//?forward?declaration?of?internal?functions
void?reflect_clamp(int?w?int?h?float*?refl_in?float*?shading_in);
void?preprocess(int?w?int?h?const?float*?img?float*?logimg);
void?postprocess(int?w?int?h?float*?refl_in?float*?shading_in?float*?refl_out?float*?shading_out);
Eigen::VectorXf?makeB(float?threshold?const?float*?im?int?w?int?h);
using?Triplet?=?Eigen::Triplet;
int?nconstraints(int?w?int?h)?{
return?w*h?+?2?*?w*(h?-?1)?+?2?*?(w?-?1)?*?h;
}
int?nentries(int?w?int?h)?{
return?2?*?(w*h?+?2?*?w*(h?-?1)?+?2?*?(w?-?1)?*?h);
}
std::vector?makeTriplets(int?w?int?h)?{
reflshadidx?I(w?h);
printf(“Assemble?matrix.\n“);
double?assemble_start?=?get_s();
std::vector??entries;
int?cit?=?0;
for?(int?y?=?0;?y? for?(int?x?=?0;?x? if?(x? //?dxR(r?c)?=?-lR(r?c)?+?lR(r?c?+?1)
entries.push_back(Triplet(cit?I.reflidx(x?y)?-1));
entries.push_back(Triplet(cit?I.reflidx(x?+?1?y)?+1));
cit++;
//?dxS(r?c)?=?-lS(r?c)?+?lS(r?c?+?1)
entries.push_back(Triplet(cit?I.shadidx(x?y)?-1));
entries.push_back(Triplet(cit?I.shadidx(x?+?1?y)?+1));
cit++;
}
if?(y? entries.push_back(Triplet(cit?I.reflidx(x?y)?-1));
entries.push_back(Triplet(cit?I.reflidx(x?y?+?1)?+1));
cit++;
entries.push_back(Triplet(cit?I.shadidx(x?y)?-1));
entries
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2015-10-27?04:09??retinex-master\
?????文件????????1296??2015-10-27?04:09??retinex-master\LICENSE.txt
?????文件?????????518??2015-10-27?04:09??retinex-master\README.md
?????目錄???????????0??2015-10-27?04:09??retinex-master\img\
?????文件??????186715??2015-10-27?04:09??retinex-master\img\input.jpg
?????文件?????2558417??2015-10-27?04:09??retinex-master\img\input.ppm
?????文件??????129119??2015-10-27?04:09??retinex-master\img\reflectance.jpg
?????文件??????638417??2015-10-27?04:09??retinex-master\img\reflectance.ppm
?????文件????????8611??2015-10-27?04:09??retinex-master\lum_retinex.cpp
?????文件?????????780??2015-10-27?04:09??retinex-master\lum_retinex.h
?????文件?????????734??2015-10-27?04:09??retinex-master\retinextest.cpp
評論
共有 條評論