资源简介
国外大牛写的Retinex图像处理,可用于图像增强,去雾等应用。
代码片段和文件信息
#include “lum_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 < sz; ++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 < sz; ++i) {
outimg[i] = std::expf(inimg[i]);
}
#endif
}
void mean(const float* inimg float* outimg int outsz) {
for (int i = 0; i < outsz; ++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 < m_w);
assert(y < m_h);
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 < h; ++y) {
for (int x = 0; x < w; ++x) {
if (x < w - 1) {
// 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 < h - 1) {
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
相关资源
- 数字图像处理常用图片BMP
- 基于图像处理毕设论文源码任务书开
- 图像处理专用图片
- OpenCV图像处理教程 - 贾志刚 课程配套
- 图像处理技术的研究现状和发展趋势
- 数字图像处理,非常经典的教材
- 数字图像处理-冈萨雷斯第三版 第十章
- 数字图像处理数据集三-Set12
- 中科院遥感所《遥感图像处理》历年
- 基于FPGA的图像处理方法
- SEM尺寸与图像处理程序(smileview)与
- Quartus II 18.0 视频图像处理IP核的使用
- 图像几何校正
- 数字图像处理冈萨雷斯第三版课后习
- 数字图像处理第三版中文答案冈萨雷
- sdu2018数字图像处理
- 东南大学计算机系大三数字图像处理
- 冈萨雷斯《数字图像处理》Digital Im
- MATLIAB数字图像处理实战
- 彩色图像处理
- 高光谱图像融合,可直接运行
- 图像处理图像库数据集
- 中科院刘定生老师图像处理课件与视
- 数字图像处理图片素材库
- 图形图像界的传世经典!Graphic.Gems.
- 数字图像处理与分析_11686738.pdf
- 信号检测与估计理论与应用 [美托马斯
- 学习图像处理最常用的图片很齐全很
- 数字图像处理第二版课件——陈天华
- Fiji使用手册
评论
共有 条评论