⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄

📁 游程编码是一种对图像颜色识别的一种编码
💻
字号:
#include<iostream>
#include<fstream>
#include<math.h>
using namespace std;
struct rnode
{
	int data;//灰度值
	int num;//相同灰度值的点的个数
};

rnode r[400];
int s[100][100];
int k=1;
void read(int v,int w)
{
	
	ifstream in("游程编码.txt");
	for(int i=1;i<=v;i++)
	{
		for(int j=1;j<=w;j++)
		{
			in>>s[i][j];
			cout<<s[i][j]<<" ";
		}
		cout<<endl;
	}
}

void RLE(int v,int w)
{
	for(int i=1;i<=v;i++)//将每一行相同的元素进行统计,存放在r[k]中
	{
		int a=1;
		for(int j=1;j<=w;j++)
		{
			if(s[i][j]==s[i][j+1])
				a++;
			else
			{
				r[k].data=s[i][j];
				r[k].num=a;
				k++;
				a=1;
			}
		}
	}
}


void change(int x,int len)//将十进制的数x转换成为二进制,二进制数的长度为len
{
	int binary[11];
	for(int i=0;i<=10;i++)
		binary[i]=0;
	int j=len;
	while(x!=0)
	{
		int y=x/2;
		binary[j]=x-2*y;
		j--;
		x=y;
	}
	for(int m=1;m<=len;m++)
		cout<<binary[m];
}
void main()
{
	cout<<"游程编码"<<endl;
	cout<<"输入行数v=";
	int v;
	cin>>v;
	cout<<"输入列数w=";
	int w;
	cin>>w;
	cout<<"输入灰度值z=";
	int z;
	cin>>z;
	int w1;//对游程进行编码时的码的长度
	int z1;//对灰度进行编码时的码的长度
	w1=log10(w)/log10(2)+1;
	z1=log10(z-1)/log10(2)+1;
	read(v,w);
	RLE(v,w);
	for(int b=1;b<k;b++)//k为r数组中的元素个数
	{
		cout<<"("<<r[b].data<<","<<r[b].num<<")";
	}
	cout<<endl;
	for(int c=1;c<k;c++)
	{
		change(r[c].data,z1);
		change(r[c].num-1,w1);
	}
	cout<<" ";
	change(z1,log10(z1)/log10(2)+1);
	cout<<" ";
	change(w1,log10(w1)/log10(2)+1);
	cout<<endl;
	int total1=(k-1)*(w1+z1);
	int total2=w*v*z1;
	double p=(double)total2/total1;
	cout<<"编码效率为:"<<p<<endl;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -