Ardely暗区图像增强

原创 2016年08月30日 09:38:25

因为要用到特别暗的图像,要分割出目标和背景,所以只有先增强,看到《一种基于Ardely分割算法的夜间图像增强方法》,但去找其引用文献的Ardely的博客却找不到了?本来想看其csdn博客步骤自己编的,但没找到,后来又看到http://blog.csdn.net/programman83/article/details/1349262点击打开链接所以直接用它的了。

/*
main test for bmp parse program
<一种基于Ardely分割算法的夜间图像增强方法>
http://blog.csdn.net/programman83/article/details/1349262
*/
#include "FileFormat.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>

#include <windows.h>

using namespace std;

char* inputFileName="bmpName.txt";
char* inputBMPFileName;

#define MAXNAMELEN 32

long WINAPI WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam);
BOOL InitWindowsClass(HINSTANCE hInstance);
BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);
HWND hWndMain;


LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

bool gDrawFlag;

//program starting.////////////////////////////////////////////////////////////////////////////////
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)
{
	MSG   msg;
	if(!InitWindowsClass(hInstance))
		return FALSE;
	
	if(!InitWindows(hInstance,nCmdShow))
		return FALSE;
	
	gDrawFlag=true;

	//Core message looping
	while(GetMessage(&msg,NULL,0,0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	////////////////////////////by me
	HWND hWnd = GetForegroundWindow();//获得活动窗口的HWND.
	RECT rect;
	GetWindowRect(hWnd, &rect);//获取当前窗口矩形区域	
	//HDC hScreenDC = GetDC(GetDesktopWindow());   //为屏幕创建设备描述表(方法1)
	HDC hScreenDC = CreateDC("DISPLAY", NULL, NULL, NULL);//为屏幕创建设备描述表(方法2)
	HDC MemDC = CreateCompatibleDC(hScreenDC);//用设备内存描述表去创建可在内存中处理图片的DC
	SIZE screensize;
	screensize.cx = rect.right - rect.left;
	screensize.cy = rect.bottom - rect.top;
	HBITMAP hBitmap;
	hBitmap = CreateCompatibleBitmap(hScreenDC, screensize.cx, screensize.cy);
	HGDIOBJ hOldBMP = SelectObject(MemDC, hBitmap);
	BitBlt(MemDC, 0, 0, screensize.cx, screensize.cy, hScreenDC, rect.left, rect.top, SRCCOPY);
	SelectObject(MemDC, hOldBMP);
	DeleteObject(MemDC);
	
	ReleaseDC(hWnd, hScreenDC);
	////////////////////////////
	return msg.wParam;

}
///////////////////////////////////////////////////////////////////////////////////////////////////

//main wndProc function: message looping
long WINAPI WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hDC;
	HBRUSH hBrush;
	HPEN hPen;
	PAINTSTRUCT PtStr;
	FILE*   inputFile,* inputBMPFile;
	FILE*   inputFile2;
	
	int outlineTransMode,transType;
	
	float ampVal;
	
	//Read In Value
	float portion;
	float fa,fb;
	
	BMParse tBMParse;
	
		if(gDrawFlag)
		{
			if((inputFile=fopen(inputFileName,"rb"))==NULL)
			{
				cout << "open inputfile error!" << endl;
				//	MessageBox(hWnd,"open inputfile error!","Msg Box",MB_OK);
					//return 0;
			}
	
			inputBMPFileName=(char*)malloc(sizeof(char)*MAXNAMELEN);
			fscanf(inputFile,"%s\r\n",inputBMPFileName);
			inputBMPFileName[strlen(inputBMPFileName)+1]='\0';
	
			if((inputBMPFile=fopen(inputBMPFileName,"rb"))==NULL)
			{
				cout << "open input bmp file error!" << endl;
				//	MessageBox(hWnd,"open input bmp file error!","Msg Box",MB_OK);
				//	return 0;
			}
			
			if((inputFile2=fopen("ArguSet.txt","rb"))==NULL)
			{
				cout << "open inputfile error!" << endl;
				//	MessageBox(hWnd,"open inputfile error!","Msg Box",MB_OK);
					//return 0;
			}
			fscanf(inputFile2,"%f",&portion);

			tBMParse.setReadInFile(inputBMPFile);
			tBMParse.showHeadInfo();
			tBMParse.parseBMPMatrix();
			//-----------------------------------//
		}
    	
			
	switch(iMessage)
	{
		case WM_PAINT:
		if(gDrawFlag)
		{
			//First draw,a black line
			hDC=BeginPaint(hWnd,&PtStr);
			hPen=(HPEN)GetStockObject(NULL_PEN);//get empty brush
			SelectObject(hDC,hPen);
			hBrush=(HBRUSH)GetStockObject(BLACK_BRUSH);
			SelectObject(hDC,hBrush);
			
			hPen=CreatePen(PS_SOLID,1,RGB(0,0,255));//create pen
			SelectObject(hDC,hPen);
			/*Core paint program follow here*/
			tBMParse.showBMP(hDC);
			tBMParse.showHist(hDC,5,tBMParse.getPicHeight()+100);
			
			tBMParse.changeGreenChannelToGrey(hDC,tBMParse.getPicWidth()+5,0);
			tBMParse.showHistBackPic(hDC,10+tBMParse.getPicWidth(),tBMParse.getPicHeight()+100);
			
			/*End of Core paint*/
			
			DeleteObject(hPen);
			DeleteObject(hBrush);
			EndPaint(hWnd,&PtStr);
			

			tBMParse.freeBMPMem();

			fclose(inputFile);
			fclose(inputBMPFile);
			fclose(inputFile2);
			
			gDrawFlag=false;
		
		//	MessageBox(hWnd,"HelloWorld!","Msg Box",MB_OK);
		}	
			return 0;
		case WM_DESTROY:
			PostQuitMessage(0);
			return 0;
		default:
			return DefWindowProc(hWnd,iMessage,wParam,lParam);
				
	}
}

//Init the Window to show out.
BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)
{
	HWND hWnd;
	hWnd=CreateWindow("WinFill",
				"test program for parse bmp file.",
					WS_OVERLAPPEDWINDOW,
				0,
				0,
				1280,
				700,
				NULL,	
				NULL,
				hInstance,
				NULL	
			    );
	if(!hWnd)
		return FALSE;
	hWndMain=hWnd;
	ShowWindow(hWnd,nCmdShow);
	UpdateWindow(hWnd);
	return TRUE;
}

//Set wndClass Propertity
BOOL InitWindowsClass(HINSTANCE hInstance)
{
	WNDCLASS wndClass;

	wndClass.cbClsExtra=0;
	wndClass.cbWndExtra=0;
	wndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
	wndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
	wndClass.hIcon=LoadIcon(NULL,"END");
	wndClass.hInstance=hInstance;
	wndClass.lpfnWndProc=WndProc;
	wndClass.lpszClassName="WinFill";
	wndClass.lpszMenuName=NULL;
	wndClass.style=CS_HREDRAW|CS_VREDRAW;
	
	return RegisterClass(&wndClass);
}

左边是原图  右边是增强结果图  但背景也增强了  不太利于分割。。。而且这个是windows程序  我在C++6.0是运行的。。。


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

另外 我刚刚按照http://blog.csdn.net/listening5/article/details/50240147 给我的VS配置了CUDA:这个人过程写得很详细 配置成功了:


运行deviceQuery 显示:


相关文章推荐

数字图像处理实践[3]---夜间图像增强

   数字图像处理实践[3]---夜间图像增强            EmilMatthew (EmilMatthew@126.com)       [  类别  ]算法创新、算法对比    [推荐指...

linux下MPI、多线程

OpenCV3.2自带的SVM不支持多线程,http://pisvm.sourceforge.net/installation.html  这个piSVM好像支持。按照这个教程,先检查是否安装了MPI...

1.3 C++中的并行和多线程

对于多线程并行的标准化支持对于C++来说是一个新东西。只有在C++11中你才可以写不依赖于系统扩展库的多线程程序。为了弄清新C++线程库,了解他的历史是很重要的。  1.3.1 C++多线程的历史 1...

第3章 空间域图像增强

  • 2016年05月29日 22:00
  • 6.24MB
  • 下载

基于PCNN的图像增强

  • 2015年12月20日 17:38
  • 2KB
  • 下载

拉普拉斯算子原理 图像增强

数学基础        拉普拉斯算子,二阶微分线性算子,为什么上来就学二阶微分算子,前文说过,与一阶微分相比,二阶微分的边缘定位能力更强,锐化效果更好,所以我们来先学习二阶微分算子,使用二阶微分算子...

第二章 、图像增强

  • 2016年05月04日 19:49
  • 7.89MB
  • 下载

图像增强算法

  • 2014年08月14日 10:17
  • 1.1MB
  • 下载

图像增强系列之原理篇1--直方图修正

最近想系统的学习一下图像增强的常用算法     第一步  学习每种算法的原理,特点,适用场景等(原理)     第二步  实际操作每种算法的图像处理(使用)     第三步  根据实际问题综合使用增强...

图像增强.ppt

  • 2015年04月24日 10:27
  • 3.16MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Ardely暗区图像增强
举报原因:
原因补充:

(最多只允许输入30个字)