标记图元

博客介绍了单色图像图元像素标记的相关内容。单色图像是m*m像素矩阵,值为0是背景,值为1是图元像素。识别图元需对图元像素标记,同一图元像素标号相同。还给出了实现该标记的源程序及输入文件示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数学化图像是一个m*m的像素矩阵。
在单色图像中,每个像素的值要么为0,要么为1,
值为0的像素是图像的背景,而值为1的像素则表示图元上的一个点,
我们称其为图元像素。
如果一个像素在另一个像素的左侧、上部、右侧或下部,
则称为两个像素为相素。
识别图元就是对图元像素进行标记,
当且仅当两个像素属于同一个图图元时,它们的标号相同。

如:
0010000
0011000
0000100
0001100
0100101
1110001
1110011

7*7图像

0020000
0022000
0000300
0003300
0400305
4440005
4440055

标记图元

//源程序

#include "iostream.h"
#include "iomanip.h"
#include "fstream.h"
#define max 100

int graph[max][max];
const int dx[4] = { -1 , 0 , 1 , 0 };
const int dy[4] = { 0 , 1 , 0 , -1 };
ofstream fout("output.txt");

void label( int m , int n )
{
 int map[max*max];
 int begin , end;
 int x , y;
 int id;
 int i , j , k;

 id = 2;
 for( i = 0 ; i < m ; i++ )
  for( j = 0 ; j < n ; j++ )
  {
   if( graph[i][j] == 1 )
   {
    begin = 0;
    end = 0;
    map[0] = i * n + j;
    do
    {
     x = map[begin] % n;
     y = map[begin] / n;
     graph[y][x] = id;
     for( k = 0 ; k < 4 ; k++ )
     {
      x = map[begin] % n + dx[k];
      y = map[begin] / n + dy[k];
      if( x >= 0 && x < n && y >=0 && y < m && graph[y][x] == 1 )
      {
       end++;
       map[end] = y * n + x;
      }
     }
     begin++;
    }while( begin <= end );
    id++;
   }
  }
}
int main()
{
 ifstream fin("input.txt");
 int m , n;
 
 char ch;
 int i , j;
 for( i = 0 ; i < max ; i++ )
  for( j = 0 ; j < max ; j++ )
   graph[i][j] = 0;
 while( fin >> m >> n )
 {
  for( i = 0 ; i < m ; i++ )
   for( j = 0 ; j < n ; j++ )
   {
    fin >> ch;
    if( ch == '1' )
     graph[i][j] = 1;
   }
  cout<<"原始图像"<<endl;
  for( i = 0 ; i < m ; i++ )
  {
   for( j = 0 ; j < n ; j++ )
    cout<<setw(3)<<graph[i][j];
   cout<<endl;
  }

  label( m , n );

  cout<<"处理后的图像"<<endl;
  for( i = 0 ; i < m ; i++ )
  {
   for( j = 0 ; j < n ; j++ )
    cout<<setw(3)<<graph[i][j];
   cout<<endl;
  }
 }
 return 0;
}

//输入文件input.txt
7 7
0010000
0011000
0000100
0001100
0100101
1110001
1110011

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值