亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
日韩久久久精品| 亚洲精选视频免费看| 91日韩一区二区三区| 蜜臀av一区二区在线观看| 国产亚洲1区2区3区| 欧美日韩国产不卡| 91日韩精品一区| 九九热在线视频观看这里只有精品| 亚洲免费观看高清完整版在线观看 | 日韩成人精品在线观看| 国产精品女同一区二区三区| 91麻豆精品国产91久久久更新时间 | 欧美在线小视频| 不卡电影一区二区三区| 美国一区二区三区在线播放| 一区二区三区欧美在线观看| 日本一区二区视频在线观看| 日韩女优制服丝袜电影| 欧美欧美午夜aⅴ在线观看| 99综合影院在线| 激情欧美日韩一区二区| 日韩综合小视频| 一区二区三区免费网站| 国产精品美女视频| 欧美韩日一区二区三区| 久久影院午夜论| xnxx国产精品| 日韩一区二区视频| 精品国内二区三区| 91精品国产福利| 欧美日韩精品系列| 欧美日韩精品二区第二页| 97精品国产97久久久久久久久久久久| 国产盗摄精品一区二区三区在线| 奇米精品一区二区三区在线观看 | 日韩精品在线看片z| 欧美日韩一级片在线观看| 日本久久精品电影| 91蝌蚪porny| 91看片淫黄大片一级在线观看| 99精品视频在线播放观看| 91污片在线观看| av色综合久久天堂av综合| 盗摄精品av一区二区三区| 粉嫩av亚洲一区二区图片| 国产91综合一区在线观看| 国产不卡在线播放| av电影在线观看一区| 91丨porny丨蝌蚪视频| 91麻豆高清视频| 欧美午夜精品一区二区蜜桃| 精品视频999| 日韩限制级电影在线观看| 日韩欧美自拍偷拍| 久久午夜羞羞影院免费观看| 久久人人97超碰com| 天天影视网天天综合色在线播放| 日韩高清不卡一区二区| 另类小说图片综合网| 国产在线视视频有精品| 福利电影一区二区三区| 99re热这里只有精品免费视频| 91麻豆免费观看| 欧美精品久久天天躁| 欧美va亚洲va香蕉在线| 中文字幕免费不卡| 一区二区欧美在线观看| 日本不卡一二三| 国产呦萝稀缺另类资源| 99精品久久久久久| 欧美日韩情趣电影| 久久一区二区视频| 亚洲乱码日产精品bd| 老司机精品视频导航| 国产电影精品久久禁18| 色老头久久综合| 精品三级在线看| 国产精品入口麻豆原神| 亚洲小说春色综合另类电影| 韩国v欧美v亚洲v日本v| 色综合色综合色综合色综合色综合| 欧美久久婷婷综合色| 久久久美女艺术照精彩视频福利播放| 国产精品久久久久毛片软件| 亚洲成av人片一区二区三区| 国产乱妇无码大片在线观看| 欧美亚洲一区二区在线观看| 久久久91精品国产一区二区精品 | 日韩视频一区在线观看| 国产精品久久久久久久久免费丝袜 | 亚洲成人免费影院| 国产呦萝稀缺另类资源| 欧美日韩一区三区四区| 欧美精彩视频一区二区三区| 视频在线观看一区二区三区| 成人国产一区二区三区精品| 91精品黄色片免费大全| 亚洲日本va午夜在线影院| 紧缚奴在线一区二区三区| 在线观看日韩一区| 国产午夜三级一区二区三| 天天色综合天天| 色综合激情久久| 久久九九久久九九| 裸体健美xxxx欧美裸体表演| 在线日韩国产精品| 国产精品理论在线观看| 国产一区二区h| 欧美成人猛片aaaaaaa| 亚洲va中文字幕| 91视频免费观看| 国产精品欧美综合在线| 国产在线播放一区三区四| 欧美高清www午色夜在线视频| 亚洲精品成人精品456| av在线不卡电影| 久久免费精品国产久精品久久久久| 亚洲国产wwwccc36天堂| 色94色欧美sute亚洲13| 亚洲少妇屁股交4| 成人av小说网| 国产欧美一区二区精品婷婷| 国产资源在线一区| 欧美一区二区三区免费观看视频| 亚洲伊人伊色伊影伊综合网| 色婷婷av一区二区三区软件| 亚洲区小说区图片区qvod| fc2成人免费人成在线观看播放| 久久久久久综合| 国产在线播放一区| 久久先锋影音av鲁色资源| 韩国av一区二区三区四区| 欧美成人a视频| 另类综合日韩欧美亚洲| 欧美videofree性高清杂交| 久久精品999| 26uuu国产电影一区二区| 国产精品影音先锋| 久久精品一区二区三区四区| 国产精品一二三四区| 国产欧美日韩另类一区| 不卡一区二区三区四区| 国产精品国产三级国产a| av色综合久久天堂av综合| 亚洲精品成人在线| 欧美日韩亚洲高清一区二区| 日韩av电影免费观看高清完整版| 日韩欧美国产小视频| 国产一区欧美一区| 国产网红主播福利一区二区| 成人av综合在线| 夜夜爽夜夜爽精品视频| 欧美久久久一区| 国产又黄又大久久| 国产精品福利影院| 日本高清不卡aⅴ免费网站| 亚洲国产色一区| 日韩美女在线视频| 成人午夜精品在线| 一区二区三区日韩精品| 91精品国产综合久久小美女| 国产精品资源网| 亚洲美女免费视频| 日韩亚洲欧美综合| 国产不卡免费视频| 亚洲自拍另类综合| 精品国产a毛片| 99国产精品一区| 免费在线观看日韩欧美| 国产精品私人影院| 欧美午夜一区二区三区| 国产一区二区三区免费播放| 国产精品久久久久婷婷二区次 | 亚洲国产精品激情在线观看| 色综合色综合色综合| 免费成人你懂的| 国产精品成人网| 制服丝袜av成人在线看| 丁香另类激情小说| 亚洲成人av资源| 欧美韩日一区二区三区四区| 欧美精选午夜久久久乱码6080| 国产精品夜夜嗨| 一卡二卡三卡日韩欧美| 久久久久久综合| 欧美日韩专区在线| 国产91丝袜在线播放九色| 亚洲成人1区2区| 国产精品久久久久久久裸模| 日韩一区二区三区av| 一本色道久久综合亚洲aⅴ蜜桃| 麻豆成人av在线| 一区二区高清免费观看影视大全| 久久嫩草精品久久久精品一| 555夜色666亚洲国产免| 97se亚洲国产综合自在线| 精品中文字幕一区二区| 一二三四社区欧美黄| 国产精品久久毛片av大全日韩| 精品播放一区二区|