资源简介
用去图像增强的一种常用方法,本资源基于论文Gray-level grouping (GLG) an automatic method for optimized image contrast Enhancement-part I the basic method实现,c++编程实现,需要opencv环境
代码片段和文件信息
//GLG,自动实现最优化的图像对比增强
#include
#include “cv.h“
#include “highgui.h“
#include
using namespace std;
int ImageGLG(IplImage *srcIplImage *dst);
int DrawHistogram(IplImage* src);//画src图像的直方图
int _tmain(int argc _TCHAR* argv[])
{
IplImage * pImg;
pImg=cvLoadImage(“lena.jpg“-1);
//创建一个灰度图像
IplImage* GrayImage = cvCreateImage(cvGetSize(pImg) IPL_DEPTH_8U 1);
IplImage* dstGrayImage = cvCreateImage(cvGetSize(pImg) IPL_DEPTH_8U 1);
cvCvtColor(pImg GrayImage CV_BGR2GRAY);
ImageGLG(GrayImagedstGrayImage);
DrawHistogram(GrayImage);//画原图像的直方图
DrawHistogram(dstGrayImage);//画GLG后图像的直方图
cvNamedWindow( “dstGrayImage“ 1 ); //创建窗口
cvNamedWindow( “GrayImage“ 1 ); //创建窗口
cvShowImage( “dstGrayImage“ dstGrayImage ); //显示图像
cvShowImage( “GrayImage“ GrayImage ); //显示图像
cvWaitKey(0); //等待按键
cvDestroyWindow( “dstGrayImage“ );//销毁窗口
cvDestroyWindow( “GrayImage“ );//销毁窗口
cvReleaseImage( &pImg ); //释放图像
cvReleaseImage( &GrayImage ); //释放图像
cvReleaseImage( &dstGrayImage ); //释放图像
return 0;
}
int ImageGLG(IplImage *srcIplImage *dst)
/*************************************************
Function:
Description: GLG图像对比增强
Input: 单通道灰度图像
Output: 同样大小的单通道灰度图像
Return:
DATE: 2013-10-16
*************************************************/
{
//Hn[]存放各个灰度级出现的次数
//Gray[][]存放非零的灰度级,Gray[0][]表示Hn[]的非零值,Gray[1][]表示G(n-1)(i),以此类推
//L[][]存放左极限,L[0][]表示L(n)(i),L[1][]表示L(n-1)(i),以此类推
//R[][]存放右极限,R[0][]表示R(n)(i),R[1][]表示R(n-1)(i),以此类推
assert(src->width==dst->width);//判断大小,如果输出和输入图像大小不等就报错退出
float Hn[256];
memset(Hn0sizeof(Hn));//把一维数组Hn全置零
int height=src->height;//取得图像尺寸
int width=src->width;
long wMulh = height * width;
//求存放图象各个灰度级出现的次数
// to do use openmp
//char *imageData; /* 指向排列的图像数据 */
//int widthStep; /* 排列的图像行大小,以字节为单位 */
for(int x=0;x for(int y=0;y uchar k=((uchar*)(src->imageData + src->widthStep*y))[x];
Hn[k]++;
}
}
//找出Hn[k]中的非0项,并把他赋给Gray[0][],Gray的列数为Hn[k]的非0项个数,Gray的行数,为Hn[k]非0项个数减19
int num=0;//用于统计Hn[k]中的非零项个数
float g[256]l[256]r[256];//暂时存放Gray,L,R第一行的值
for(int k=0;k<256;k++){
if(Hn[k]!=0){
g[num]=Hn[k];
l[num]=k;
r[num]=k;
num++;
}
}
//用一般数组Gray,L,R
float Gray[256][256];
float L[256][256];
float R[256][256];
//把Gray,LR的第0行初始化
for(int i=0;i Gray[0][i]=g[i];
L[0][i]=l[i];
R[0][i]=r[i];
}
//循环从这开始,由第0行,计算到第num-20行,循环num-20次
for(int ii=0;ii //找Gray[ii][]中的最小值a,及其位置ia
int a=Gray[ii][0];
int ia=0;
for(int i=0;i if(Gray[ii][i] a=Gray[ii][i];
ia=i;
}
}
cout<
//计算位置ia的灰度级与旁边较小的灰度级j合并j的幅值
- 上一篇:C++倒排索引
- 下一篇:用数组和链表方法实现约瑟夫环
相关资源
- C++倒排索引
- openGL和C++实现光线跟踪作业
- c++_图书信息管理系统(
- 遗传算法C++
- 高斯迭代法的c++源程序
- C++排课程序
- c++学籍管理系统 课程设计报告
- 从C语言转C++简明教程_v5.3.zip
- c++语言基础教程课后答案_吕凤翥编
- 通讯录管理系统C++
- C++工作量的统计
- dsp2812三相PWM逆变源程序C++
- C++ primer plus课后编程练习题答案
- 哈工大软设二--DBMS原型开发系统C++
- C++ 控制台 扫雷 鼠标输入
- C++图书管理系统代码
- 基于C++实验室预约系统
- LSTM C++源代码
- VC++ 中国象棋程序源代码
- C/C++仿真实现Linux文件系统
- C++ primer 第五版源程序含C++11扩展
- VC++ UDP穿透NATP2P原理及代码.rar
- 高斯消去法C++代码
- 蚁群算法源代码 C++版
- 人工智能 A*算法 八数码问题 C++ 报告
- 光束法区域平差c++程序
- VC++ USB接口编程(代码)
- 轻量级C++实现的httpserver和httpclient
- 打砖块游戏
- C++程序设计原理与实践 原书第2版 基
评论
共有 条评论