• 大小: 3.21MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-15
  • 语言: 其他
  • 标签: 图像处理  

资源简介

国外大牛写的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

评论

共有 条评论