亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dlgshannon.cpp

?? 《Visual C++數字圖像獲取 處理及實踐應用》一書的源代碼
?? CPP
字號:
// DlgShannon.cpp : implementation file
//

#include "stdafx.h"
#include "imageprocessing.h"
#include "DlgCoding.h"
#include <math.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDlgShannon dialog


CDlgShannon::CDlgShannon(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgShannon::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgShannon)
	m_dEntropy = 0.0;
	m_dAvgCodeLen = 0.0;
	m_dEfficiency = 0.0;
	//}}AFX_DATA_INIT
}


void CDlgShannon::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgShannon)
	DDX_Control(pDX, IDC_LST_Table, m_lstTable);
	DDX_Text(pDX, IDC_EDIT1, m_dEntropy);
	DDX_Text(pDX, IDC_EDIT2, m_dAvgCodeLen);
	DDX_Text(pDX, IDC_EDIT3, m_dEfficiency);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgShannon, CDialog)
	//{{AFX_MSG_MAP(CDlgShannon)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgShannon message handlers

BOOL CDlgShannon::OnInitDialog() 
{
	// 調用默認得OnInitDialog()函數
	CDialog::OnInitDialog();

	// 初始化變量
	m_dEntropy = 0.0;
	m_dAvgCodeLen = 0.0;

	// 字符串變量
	CString	str;
	str = "1";
	
	// 循環變量
	LONG	i;
	LONG	j;

	// 控件ListCtrl的ITEM
	LV_ITEM lvItem;

	// 保存控件ListCtrl中添加的ITEM編號
	int		nItem2View;	
	
	// 中間變量
	double	dT;
	LONG	lTemp;
	
	// 保存計算中間結果的數組
	double * dTemp;
	dTemp = new double[m_nColorNum];
	
	// 數組用來存放灰度值和其位置之間的映射
	LONG *	l4Turn;
	l4Turn = new LONG[m_nColorNum];
	
	// 當前編碼區間的概率和
	double	dAccum;
	dAccum = 1.0;

	// 已經編碼灰度值概率的統計和
	double	dSum;
	dSum    = 0;
	
	// 已編碼灰度值
	LONG	lCount = 0;
		
	// 起始位置
	LONG	lBegin;
	
	// 指示編碼是否已經完成一段
	BOOL	* bFinished;
	bFinished = new BOOL[m_nColorNum];
	
	// 分配內存	
	m_strCode = new CString[m_nColorNum];
			
	for (i = 0; i < m_nColorNum; i ++)
	{			
		
		// 初始化為FALSE
		bFinished[i] = FALSE;

		// 將概率賦值dTemp數組
		dTemp[i] = m_dProba[i];
		
		// 按灰度值大小順序排列
		l4Turn[i] = i;
		
	}
	
	// 用冒泡法對進行灰度值出現的概率排序
	// 同時改變灰度值位置的映射關系
	for (j = 0; j < m_nColorNum - 1; j ++)
		for (i = 0; i < m_nColorNum - j - 1; i ++)
			if (dTemp[i] > dTemp[i + 1])
			{
				// 互換
				dT = dTemp[i];
				dTemp[i] = dTemp[i + 1];
				dTemp[i + 1] = dT;
				
				// 將i和i+1灰度的位置值互換
				lTemp = l4Turn[i];
				l4Turn[i] = l4Turn[i+1];
				l4Turn[i+1] = lTemp;
				
			}
		
	/*******************************************************
	計算香農-弗諾編碼表
	*******************************************************/
	
	// 從概率大于0處開始編碼
	for (lBegin = 0; lBegin < m_nColorNum - 1; lBegin ++)
		if (dTemp[lBegin] > 0)
			break;

	// 開始編碼
	while(lCount < m_nColorNum)
	{
		// 從概率大于零的灰度值開始編碼
		lCount = lBegin;
		
		// 對區間進行分割,對每個區間的灰度值編碼
		for (i = lBegin; i < m_nColorNum; i ++)
		{
			// 判斷是否編碼完成
			if (bFinished[i] == FALSE)
			{
				// 增加當前編碼區間的概率綜合
				dSum += dTemp[i];
				
				// 判斷是否超出總和的一半
				if (dSum > dAccum/2.0)
				{
					// 超出,追加的字符改為0
					str = "0";
				}
				
				// 追加字符
				m_strCode[l4Turn[i]] = m_strCode[l4Turn[i]] + str;
				
				// 判斷是否編碼完一段
				if (dSum == dAccum)
				{
					// 完成一部分編碼,重新計算dAccum
					
					// 初始化dSum為0
					dSum = 0;
					
					// 判斷是不是對所有灰度值已經編碼一遍
					if (i == m_nColorNum - 1)
						j = lBegin;
					else
						j = i + 1;
					
					// 保存j值
					lTemp = j;
					str = m_strCode[l4Turn[j]];
					
					// 計算下一編碼區間的概率總和
					dAccum = 0;
					for (; j < m_nColorNum; j++)
					{
						// 判斷是否是同一段編碼
						if ((m_strCode[l4Turn[j]].Right(1) != str.Right(1)) 
							|| (m_strCode[l4Turn[j]].GetLength() != str.GetLength()))
							break;

						// 當前區間的概率總和增加
						dAccum += dTemp[j];
					}
					
					// 碼字增加值為1
					str = "1";
					
					// 判斷該段編碼已經完成
					if (lTemp + 1 == j)
						bFinished[lTemp] = TRUE;
				}
			}
			else
			{
				//  開始下一輪編碼
				lCount ++;
				
				// 重新賦2dSum為0
				dSum = 0;
				
				// 判斷是不是對所有灰度值已經編碼一遍
				if (i == m_nColorNum - 1)
					j = lBegin;
				else
					j = i + 1;
				
				// 保存j值
				lTemp = j;
				str = m_strCode[l4Turn[j]];
				
				// 計算下一編碼區間的概率總和
				dAccum = 0;
				for (; j < m_nColorNum; j++)
				{
					// 判斷是否是同一段編碼
					if ((m_strCode[l4Turn[j]].Right(1) != str.Right(1)) 
						|| (m_strCode[l4Turn[j]].GetLength() != str.GetLength()))
					{
						// 退出循環
						break;
					}
					
					// 累加
					dAccum += dTemp[j];
				}
				
				str = "1";
				
				// 判斷該段編碼已經完成
				if (lTemp + 1 == j)
					bFinished[lTemp] = TRUE;
			}
		}
	}
	
	// 計算圖像熵
	for (i = 0; i < m_nColorNum; i ++)
	{
		// 判斷概率是否大于0
		if (m_dProba[i] > 0)
		{
			// 計算圖像熵
			m_dEntropy -= m_dProba[i] * log(m_dProba[i]) / log(2.0);
		}
	}
	
	// 計算平均碼字長度
	for (i = 0; i < m_nColorNum; i ++)
	{
		// 累加
		m_dAvgCodeLen += m_dProba[i] * m_strCode[i].GetLength();
	}
	
	// 計算編碼效率
	m_dEfficiency = m_dEntropy / m_dAvgCodeLen;
	
	// 保存變動
	UpdateData(FALSE);
	
	/*************************************************
	輸出編碼結果
	*************************************************/	
	
	// 設置List控件樣式
	m_lstTable.ModifyStyle(LVS_TYPEMASK, LVS_REPORT);
	
	// 給List控件添加Header
	m_lstTable.InsertColumn(0, "灰度值", LVCFMT_LEFT, 60, 0);
	m_lstTable.InsertColumn(1, "灰度值概率", LVCFMT_LEFT, 78, 0);
	m_lstTable.InsertColumn(2, "香農-弗諾編碼", LVCFMT_LEFT, 110, 1);
	m_lstTable.InsertColumn(3, "碼字長度", LVCFMT_LEFT, 78, 2);
	
	// 設置樣式為文本
	lvItem.mask = LVIF_TEXT;
	
	// 添加顯示
	for (i = 0; i < m_nColorNum; i ++)
	{
		// 第一列顯示
		lvItem.iItem = m_lstTable.GetItemCount();
		str.Format("%u",i);
		lvItem.iSubItem = 0;
		lvItem.pszText= (LPTSTR)(LPCTSTR)str;
		nItem2View = m_lstTable.InsertItem(&lvItem);
		
		// 其它列顯示
		lvItem.iItem = nItem2View;
		
		// 添加灰度值出現的頻率
		lvItem.iSubItem = 1;
		str.Format("%f",m_dProba[i]);
		lvItem.pszText = (LPTSTR)(LPCTSTR)str;
		m_lstTable.SetItem(&lvItem);
		
		// 添加香農-弗諾編碼
		lvItem.iSubItem = 2;
		lvItem.pszText = (LPTSTR)(LPCTSTR)m_strCode[i];
		m_lstTable.SetItem(&lvItem);
		
		// 添加碼字長度
		lvItem.iSubItem = 3;
		str.Format("%u",m_strCode[i].GetLength());
		lvItem.pszText = (LPTSTR)(LPCTSTR)str;
		m_lstTable.SetItem(&lvItem);
	}
	
	//  內存釋放
	delete l4Turn;
	delete dTemp;
	delete bFinished;
	
	return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品欧美一区二区三区不卡 | 久久久久久99精品| 97久久超碰国产精品| 国产高清精品久久久久| 国产麻豆9l精品三级站| 免费成人av在线| 久久国产精品露脸对白| 久久91精品国产91久久小草| 美女尤物国产一区| 国产一区二区在线影院| 国产一区二区三区日韩| 国产精品456| 粉嫩13p一区二区三区| 北条麻妃国产九九精品视频| 99精品视频在线观看免费| 91免费版pro下载短视频| 91免费视频大全| 欧美色图12p| 日韩一区二区免费高清| 久久久久久黄色| 1024精品合集| 视频在线观看国产精品| 精品一区二区在线观看| 粉嫩在线一区二区三区视频| 91丨九色丨蝌蚪富婆spa| 欧美日韩大陆一区二区| 欧美mv日韩mv国产| 国产精品久99| 天堂久久一区二区三区| 激情文学综合网| 91网站在线播放| 4hu四虎永久在线影院成人| 久久久亚洲高清| 亚洲精品成人精品456| 美女一区二区视频| 国产成人精品一区二区三区四区 | 国产激情一区二区三区四区| 91同城在线观看| 欧美一区二区啪啪| 国产精品免费av| 视频一区二区三区入口| 国产成人精品www牛牛影视| 色综合久久天天| 久久亚洲精品国产精品紫薇| 伊人夜夜躁av伊人久久| 国内一区二区在线| 欧美日韩在线播放一区| 国产欧美精品一区| 日本欧美久久久久免费播放网| 国产成人av一区二区| 91精品国产福利在线观看 | 亚洲色图一区二区| 九一久久久久久| 欧美午夜精品久久久久久孕妇| 久久九九影视网| 日韩—二三区免费观看av| 91免费观看视频在线| 久久毛片高清国产| 青娱乐精品视频在线| 99re热这里只有精品免费视频| 日韩视频免费观看高清在线视频| 亚洲男人的天堂一区二区| 韩国精品久久久| 日韩欧美你懂的| 午夜精品久久久久影视| 色狠狠综合天天综合综合| 中文字幕av资源一区| 国产综合一区二区| 日韩免费观看高清完整版| 首页国产丝袜综合| 欧美日韩高清一区| 视频一区二区不卡| 欧美日韩国产在线观看| 亚洲综合一区二区精品导航| 色综合天天综合网天天看片| 中文字幕一区二区三中文字幕| 国产91精品一区二区麻豆网站 | 日本韩国欧美国产| 中文字幕精品三区| 国产成a人无v码亚洲福利| 久久久青草青青国产亚洲免观| 日韩专区在线视频| 欧美一区二区在线免费播放| 三级影片在线观看欧美日韩一区二区| 欧美四级电影在线观看| 亚洲国产精品一区二区www在线| 欧美系列日韩一区| 婷婷综合另类小说色区| 日韩一区二区视频| 国产精一区二区三区| 国产精品午夜免费| 色av综合在线| 三级影片在线观看欧美日韩一区二区| 日韩午夜激情免费电影| 国产一区二区在线影院| 国产精品美女一区二区在线观看| 9色porny自拍视频一区二区| 一区二区三区影院| 日韩一二三区视频| 高清成人免费视频| 亚洲一级二级在线| 欧美va亚洲va在线观看蝴蝶网| 国产黄人亚洲片| 一区二区三区中文字幕在线观看| 91精品国产一区二区三区香蕉| 国模冰冰炮一区二区| 自拍偷拍欧美激情| 91精品国产综合久久国产大片| 成人一道本在线| 亚洲国产成人精品视频| 精品国产乱码久久久久久久| 99在线精品免费| 免播放器亚洲一区| 中文字幕av资源一区| 777亚洲妇女| 成人精品一区二区三区四区| 天天综合日日夜夜精品| 中文欧美字幕免费| 欧美一级免费大片| 97久久精品人人做人人爽50路| 国产一区二区在线影院| 亚洲一区二区av在线| 久久伊人中文字幕| 欧美制服丝袜第一页| 国产一区欧美二区| 午夜激情一区二区三区| 国产精品拍天天在线| 91精品国产高清一区二区三区蜜臀| 成人免费观看视频| 久久不见久久见免费视频7| 亚洲毛片av在线| 欧美国产综合一区二区| 日韩美女视频一区二区在线观看| 色视频成人在线观看免| 国产不卡免费视频| 韩国av一区二区三区四区| 午夜精品一区二区三区电影天堂 | 国产精品亚洲午夜一区二区三区 | 国产农村妇女精品| 91精品视频网| 欧美无砖专区一中文字| eeuss鲁片一区二区三区在线看| 久久成人免费日本黄色| 五月天国产精品| 亚洲成a人v欧美综合天堂| 综合欧美一区二区三区| 中日韩av电影| 国产日韩欧美电影| 久久久久久毛片| 欧美精品一区二区三| 日韩一级大片在线观看| 日韩午夜电影在线观看| 日韩欧美高清dvd碟片| 91精品国产综合久久精品性色 | 国产aⅴ综合色| 久久成人综合网| 黑人巨大精品欧美黑白配亚洲| 奇米四色…亚洲| 毛片av中文字幕一区二区| 麻豆国产欧美一区二区三区| 蜜臀av性久久久久蜜臀aⅴ流畅| 日日骚欧美日韩| 日本亚洲三级在线| 精品一区免费av| 国产精品亚洲人在线观看| 国产1区2区3区精品美女| 97久久超碰国产精品| 欧美在线观看你懂的| 欧美人xxxx| 欧美大尺度电影在线| 久久婷婷色综合| 国产精品毛片久久久久久久| 亚洲免费在线视频一区 二区| 夜夜嗨av一区二区三区四季av| 亚洲.国产.中文慕字在线| 美国三级日本三级久久99| 风间由美中文字幕在线看视频国产欧美 | 在线欧美日韩国产| 91麻豆精品国产自产在线| 久久网这里都是精品| 中文字幕免费在线观看视频一区| 亚洲女同女同女同女同女同69| 亚洲国产综合在线| 久久99精品一区二区三区| 成人免费观看男女羞羞视频| 在线视频一区二区免费| 欧美一区二区视频在线观看| 国产女主播一区| 无吗不卡中文字幕| 国产99久久久国产精品潘金网站| 91激情五月电影| 精品嫩草影院久久| 尤物视频一区二区| 精品一区二区三区免费毛片爱| 97精品视频在线观看自产线路二| 欧美精品九九99久久| 中文字幕亚洲一区二区av在线| 日韩电影免费在线| 91免费版在线| 国产欧美日韩亚州综合|