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

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

?? dlgshannon.cpp

?? 《VC數字圖處理典型算法以及實現》第12章的對應源代碼
?? 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一区二区三区免费野_久草精品视频
欧美精品一区二区三区四区| 欧美精品一区二区三| 成人av电影在线播放| 国产福利精品一区| 国产精品888| 成人av综合一区| 色综合久久中文字幕| 在线亚洲+欧美+日本专区| 欧美专区日韩专区| 在线不卡一区二区| 久久综合久久99| 亚洲国产精品v| 亚洲欧美日韩一区二区三区在线观看| 综合久久久久久| 一区二区三区四区五区视频在线观看| 亚洲香蕉伊在人在线观| 免费观看日韩电影| 国产成人精品综合在线观看| 91原创在线视频| 欧美揉bbbbb揉bbbbb| 精品三级av在线| 国产精品久久久久影院亚瑟| 亚洲观看高清完整版在线观看 | 日韩高清一区二区| 精品在线你懂的| 91老师片黄在线观看| 欧美日韩精品一区视频| 久久午夜电影网| 亚洲精品视频在线观看网站| 日本女人一区二区三区| 99久久综合国产精品| 在线电影院国产精品| 国产精品二三区| 久久精品国产一区二区三 | 国产成人啪午夜精品网站男同| 91小视频在线| 精品日本一线二线三线不卡| 亚洲人亚洲人成电影网站色| 久久精品久久综合| 在线中文字幕不卡| 久久精品水蜜桃av综合天堂| 五月天国产精品| aaa国产一区| 精品成人在线观看| 午夜精品成人在线| a4yy欧美一区二区三区| wwwwxxxxx欧美| 日本人妖一区二区| 欧美亚洲综合久久| 国产精品久久久久久久岛一牛影视 | 欧美一级电影网站| 亚洲欧美另类小说| av成人老司机| 久久伊人中文字幕| 免费人成在线不卡| 555夜色666亚洲国产免| 亚洲综合一区二区三区| 99麻豆久久久国产精品免费优播| 欧美一区二区三区影视| 午夜伦理一区二区| 日本高清不卡一区| 亚洲欧美怡红院| 岛国精品一区二区| 欧美激情在线观看视频免费| 美腿丝袜亚洲色图| 日韩美女在线视频 | 国产精品福利av| 成人丝袜高跟foot| 国产欧美综合色| 国产传媒日韩欧美成人| 国产亚洲精品7777| 国产99久久久国产精品潘金 | 伦理电影国产精品| 日韩欧美亚洲另类制服综合在线| 肉色丝袜一区二区| 欧美一区二区三区婷婷月色| 美女视频黄免费的久久| 精品国产3级a| 国产经典欧美精品| 国产精品久久久久久久久晋中| 成人精品视频.| 亚洲色大成网站www久久九九| 97超碰欧美中文字幕| 亚洲欧美日韩精品久久久久| 91成人免费网站| 视频一区中文字幕| 337p粉嫩大胆噜噜噜噜噜91av| 国产一区二区精品在线观看| 国产日韩欧美电影| 在线视频一区二区免费| 日韩在线一区二区三区| 亚洲精品在线免费播放| 成人久久视频在线观看| 亚洲一区二区欧美日韩| 91精品免费在线| 丁香天五香天堂综合| 亚洲美女视频在线观看| 欧美亚洲综合另类| 激情偷乱视频一区二区三区| 国产精品色哟哟| 欧美日韩第一区日日骚| 国产成人综合亚洲91猫咪| 一区二区三区小说| 精品国产乱码久久久久久牛牛| 成人久久18免费网站麻豆| 亚洲成人资源网| wwwwxxxxx欧美| 色88888久久久久久影院野外| 久久精品免费看| 国产精品久久久久久久蜜臀| 欧美电影一区二区三区| 懂色av中文字幕一区二区三区| 亚洲国产欧美一区二区三区丁香婷| 日韩一级免费观看| 欧美在线观看禁18| 国产精品一区二区男女羞羞无遮挡 | 欧美人妇做爰xxxⅹ性高电影| 国产黄人亚洲片| 亚洲国产毛片aaaaa无费看| 国产清纯美女被跳蛋高潮一区二区久久w | 亚洲色图制服诱惑| 欧美不卡一区二区三区| 在线影视一区二区三区| 国产乱人伦偷精品视频不卡| 三级成人在线视频| 亚洲人成网站色在线观看 | 一本色道久久综合狠狠躁的推荐| 理论片日本一区| 香港成人在线视频| 亚洲男帅同性gay1069| 久久毛片高清国产| 欧美一区二区精品| 欧美高清视频不卡网| 色国产综合视频| 成人的网站免费观看| 国产大陆a不卡| 九九热在线视频观看这里只有精品| 亚洲国产精品一区二区久久恐怖片 | 日韩三级视频在线观看| 欧美图片一区二区三区| 一本久久精品一区二区| 成人精品亚洲人成在线| 国产不卡高清在线观看视频| 精品一区二区影视| 蜜臀av性久久久久av蜜臀妖精| 爽好久久久欧美精品| 亚洲va韩国va欧美va精品| 一区二区三区在线视频播放| 亚洲黄色片在线观看| 亚洲欧美一区二区三区极速播放| 国产三级精品三级| 国产欧美日韩综合精品一区二区| 337p粉嫩大胆噜噜噜噜噜91av| 精品欧美一区二区三区精品久久| 欧美一区二区免费| 久久香蕉国产线看观看99| 国产天堂亚洲国产碰碰| 国产午夜精品一区二区三区嫩草 | 国产精品一卡二卡| 国产精品小仙女| 99久久99久久精品国产片果冻| 色综合一区二区| 欧美视频自拍偷拍| 日韩精品一区二区三区四区视频| 精品日韩在线一区| 国产丝袜欧美中文另类| 亚洲少妇中出一区| 五月婷婷激情综合| 狠狠v欧美v日韩v亚洲ⅴ| 成人一区二区三区视频| 日本二三区不卡| 欧美精品日韩一区| 精品欧美一区二区久久| 中文字幕在线观看一区二区| 一区二区三区不卡视频| 久久成人18免费观看| 成人福利视频在线看| 欧美性猛交xxxxxxxx| 精品国产露脸精彩对白| 国产精品污污网站在线观看| 亚洲成人一区二区在线观看| 久久99精品久久久久久国产越南| 成人免费毛片a| 欧美日韩卡一卡二| 日本一区二区久久| 亚洲成人手机在线| 成人午夜在线视频| 欧美精品777| 国产精品沙发午睡系列990531| 午夜视频在线观看一区二区| 国产成人综合网| 69堂成人精品免费视频| 国产精品色哟哟网站| 青青草国产成人99久久| 色悠久久久久综合欧美99| 日韩精品中文字幕在线不卡尤物 | 91精品婷婷国产综合久久性色| 国产女主播视频一区二区| 欧美bbbbb| 欧美色网站导航|