- 42
- 0
- 约1.64千字
- 约 7页
- 2018-06-30 发布于上海
- 举报
PAGE \* MERGEFORMAT 1 PAGE \* MERGEFORMAT 1实验四 图像的直方图均衡化实验目的1.熟悉图像直方图得分均衡化方法2、通过本实验教学,加深对图像文件格式,图像文件的读写,图像处理程序的基本结构,处理方式和编程基础的认识。实验内容及要求 基本要求:利用Visual C++编程环境编制图像处理程序。对一副灰度图像进行灰度直方图统计与均衡化处理。直方图均衡化处理是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围的均匀分布。列出原始图像与变换后图像的灰度级。统计原图像中各个灰度级的像素个数。利用灰度变换函数计算变换后的灰度值。统计变换后图像的直方图。三.实验内容#include stdafx.h#include opencv2/opencv.hppusing namespace cv;using namespace std;void test1(){ Mat inputImage = imread(..\\image\\book\\beach.jpg, 0); float cuh[256]; float h[256]; //初始化灰度值 for (int i = 0;i 256;i++) { h[i] = 0; cuh[i] = 0; } //均衡化灰度直方图 for (int i = 0;i inputImage.size().height;i++) for (int j = 0;j inputImage.size().width;j++) { h[inputImage.atuchar(i, j)]++; } for (int i = 0;i 256;i++) //总值/height*width h[i] = h[i] / (inputImage.size().height*inputImage.size().width); //累积灰度直方图 for (int i = 0;i 256;i++) for (int j = 0;j = i;j++) cuh[i] += h[j]; //inputImage.clone()为全新复制的图,inputImage指向的是原图 Mat newImage = inputImage.clone(); uchar r; uchar z; //已知r值求Z值 for (int i = 0;i inputImage.size().height;i++) for (int j = 0;j inputImage.size().width;j++) { r = inputImage.atuchar(i, j); //saturatr_castuchar()将() 里的内容转换为uchar型 z = saturate_castuchar(cuh[r] * 255); newImage.atuchar(i, j) = z; } namedWindow(inputImage); namedWindow(newImage); imshow(inputImage, inputImage); imshow(newImage, newImage); waitKey();}int main(int argc, _TCHAR* argv[]){ test1(); return 0;}实验心得直方图均衡化就是对图像进行非线性拉伸,再重新分配图像像素值。输出的灰度级概率密度函数是均匀的。灰度级均衡化处理的最终结果是一幅动态范围的图像,它具有较高的对比度。天津科技大学数字图像处理实验报告实验四 图像的直方图均衡化学校:天津科技大学学院:计算机科学与技术学号名:岳泽健指导老师:任德华提交时间:2018年6月13日
原创力文档

文档评论(0)