BMP图像由彩图变为灰度图

BMP图像由彩图变为灰度图
BMP图像由彩图变为灰度图

Date:6月21日

任务:BMP真彩图像转为灰度图

一,算法及公式:

1,什么叫灰度图?任何颜色都有红、绿、蓝三原色组成,假如原来某点的颜色为RGB(R,G,B),那么,我们可以通过下面几种方法,将其转换为灰度:

浮点算法:Gray=R*0.3+G*0.59+B*0.11

整数方法:Gray=(R*30+G*59+B*11)/100

移位方法:Gray =(R*28+G*151+B*77)>>8;

平均值法:Gray=(R+G+B)/3;

仅取绿色:Gray=G;

通过上述任一种方法求得Gray后,将原来的RGB(R,G,B)中的R,G,B统一用Gray替换,形成新的颜色RGB(Gray,Gray,Gray),用它替换原来的RGB(R,G,B)就是灰度图了。

2,改变象素矩阵的RGB值,来达到彩色图转变为灰度图

加权平均值算法:根据光的亮度特性,其实正确的灰度公式应当是

R=G=B=R*0.299+G*0.587+B0.144

为了提高速度我们做一个完全可以接受的近似,公式变形如下:

R=G=B=(R*3+G*6+B)/10

3,真正的24位真彩图与8位的灰度图的区别就在于,真彩图文件中没有调色板,灰度图有调色板,真彩图中的象素矩阵是RGB值,

灰度图中的象素矩阵是调色板索引值。源代码1只简单的改变象素矩阵的RGB值,来达到彩色图转为灰度图,并没有添加调色板。源代码2添加了调色板。

二,源代码

1,

//可以输入文件名的源代码,有些变量定义进行了完善

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

#include "windows.h"

#include "conio.h"

typedef struct{

unsigned char b;

unsigned char r;

unsigned char g;

}pixel;

pixel a[640][480];

unsigned char aa[640][480];

void main()

{

BITMAPFILEHEADER FILEH;

BITMAPINFOHEADER INFOH;

RGBQUAD RGBH[256];

char name[11];

char *fname[11];

printf("输入需要转换的图片名:");

scanf("%s",&name);

*fname=name;

strcat(*fname,".bmp");

printf("%s",*fname);

FILE *fp;

if((fp=fopen(*fname,"rb"))==NULL)

{

//if((fp=fopen(*fname,"wb"))==NULL)//防止首次进入时初始化失败

//{

printf("打开文件%s失败!按任意键返回主菜单!",fname);

getch();

exit(1);

//}

}

printf("%s",*fname);

int LEN1=sizeof(BITMAPFILEHEADER);

int LEN2=sizeof(BITMAPINFOHEADER);

int X,Y;

printf("\nlen=%d,%d\n",LEN1,LEN2);

fread(&FILEH,sizeof(BITMAPFILEHEADER),1,fp); fread(&INFOH,sizeof(BITMAPINFOHEADER),1,fp); X=INFOH.biWidth;

Y=INFOH.biHeight;

//printf("%d*%d",X,Y);

if(FILEH.bfType!=0x4d42)

{

fclose(fp);

printf("文件头不正确,不是bmp!");

exit(1);

}

if(INFOH.biBitCount!=24&&INFOH.biBitCount!=8) {

fclose(fp);

printf("信息头不正确,不是bmp!");

exit(1);

}

//*RGBH=A;

unsigned char blue,green,red,color;

int j,k;

if(INFOH.biBitCount==8)

{

fread(&RGBH,sizeof(RGBQUAD),256,fp);

for(j=0;j

for(k=0;k

{

fread(&color,1,1,fp);

red=RGBH[color].rgbRed;

green=RGBH[color].rgbGreen;

blue=RGBH[color].rgbBlue;

aa[j][k]=(unsigned

char)(0.299*(float)red+0.574*(float)green+0.114*(float)blue);

}

}

if(INFOH.biBitCount==24)

{

for(j=0;j

for(k=0;k

{

fread(&blue,1,1,fp);

fread(&green,1,1,fp);

fread(&red,1,1,fp);

a[j][k].b=blue;

a[j][k].g=green;

a[j][k].r=red;

aa[j][k]=(unsigned

char)(0.299*(float)red+0.574*(float)green+0.114*(float)blue);

}

}

//printf("ok");

fclose(fp);

printf("输入输出的灰度图片名:");

scanf("%s",&name);

strcat(*fname,".bmp");

if((fp=fopen(*fname,"wb"))==NULL)

{

fclose(fp);

printf("打开图片124.bmp失败");

exit(1);

}

INFOH.biBitCount=8;

fwrite(&FILEH,LEN1,1,fp);

fwrite(&INFOH,LEN2,1,fp);

int m=0;

for(int i=0;i<256;i++)

{

fwrite(&i,1,1,fp);

fwrite(&i,1,1,fp);

fwrite(&i,1,1,fp);

fwrite(&m,1,1,fp);

}

for(j=0;j

for(k=0;k

{

fwrite(&aa[j][k],1,1,fp);

}

fclose(fp);

printf("生成灰度图%s成功!\n",*fname); }

2,

bmpFormat.h

--------------------------------------------

#ifndef _BMPTEST_H_

#define _BMPTEST_H_

#include

typedef unsigned char BYTE;

typedef unsigned short WORD;

typedef struct {

long imageSize;

long blank;

long startPostition;

}BmpHead;

typedef struct {

long length;

long width;

long height;

WORD colorPlane;

WORD bitColor;

long zipFormat;

long readSize;

long xPels;

long yPels;

long colorUse;

long colorImportant;

}InfoHead;

typedef struct {

BYTE rgbBlue;

BYTE rgbGreen;

BYTE rgbRed;

BYTE rgbReserved;

}RGBMixPlate;

#endif

-------------------------------------------- create.c

-------------------------------------------- #include "bmpFormat.h"

#include

#include

int main(int argc, char *argv[]){

//tiff文件涉及变量

TIFF *image; //tiff文件指针

uint32 width, height; //图片的宽度和高度

char *buffer; //保存tiff文件中的图像灰度信息缓存

tsize_t stripSize; //tiff 中图像的条大小

unsigned long bufferSize; //缓存大小

int stripMax, stripCount; //图像总共的条数和读条信息时的控制变量

unsigned long imageOffset, result; //读文件信息时的控制变量和每次读的结果

//循环控制变量

unsigned int i;

unsigned int j;

//bmp文件涉及变量

BmpHead bmphead; //bmp文件头(不包括固定信息)

InfoHead infohead; //bmp信息头

RGBMixPlate *color; //调色板

BYTE *index; //图像数据在调色板中的索引值

FILE *bmp; //bmp文件指针

char bm[2]={'B','M'}; //bmp文件头中的一块固定信息,表示这是一张BMP图片

// 打开tiff图片

if((image = TIFFOpen(argv[1], "r")) == NULL){

fprintf(stderr, "Could not open incoming image\n");

return -1;

}

//获取图片的宽度和高度

TIFFGetField(image, TIFFTAG_IMAGEWIDTH, &width);

TIFFGetField(image, TIFFTAG_IMAGELENGTH, &height);

stripSize = TIFFStripSize (image); //每条的大小

stripMax = TIFFNumberOfStrips (image); //一共有多少条

imageOffset = 0; //后面读取文件信息时使用的偏移量

//根据文件信息申请相应的数据空间

bufferSize = TIFFNumberOfStrips (image) * stripSize;

if((buffer = (char *) malloc(bufferSize)) == NULL)

{

fprintf(stderr, "Could not allocate enough memory for the uncompressed image\n");

return -1;

}

//读取文件中的灰度信息

for (stripCount = 0; stripCount < stripMax; stripCount++)

{

if((result = TIFFReadEncodedStrip (image, stripCount,buffer + imageOffset,stripSize)) == -1)

{

fprintf(stderr, "Read error on input strip number %d\n", stripCount);

return -1;

}

imageOffset += result;

}

//bmp文件头成员赋值

bmphead.blank=0;

//保留字,为0

bmphead.imageSize=14+40+4*256+width*height; //图片的大小=文件头大小+信息头大小+调色板大小+实际图片大小bmphead.startPostition=14+40+4*256; //图片实际数据相对于文件头的偏移量

//bmp信息头成员赋值(可参见BMP文件解析每个成员的定义)

infohead.length=40;

infohead.width=width;

infohead.height=height;

infohead.colorPlane=1;

infohead.bitColor=8;

infohead.zipFormat=0;

infohead.readSize=width*height;

infohead.xPels=400;

infohead.yPels=300;

infohead.colorUse=0;

infohead.colorImportant=0;

//申请调色板和数据域空间

color=(RGBMixPlate *)malloc(sizeof(RGBMixPlate)*256);

index=(BYTE *)malloc(sizeof(BYTE)*infohead.readSize);

//生成256色灰度调色板

for(i=0;i<256;i++)

{

color[i].rgbBlue=i;

color[i].rgbGreen=i;

color[i].rgbRed=i;

color[i].rgbReserved=0;

}

//256色灰度bmp的数据信息实际就是该灰度在相应灰度值的调色板中的颜色

for(i=0;i

for(j=0;j

index[i*width+j]=buffer[(height-1-i)*width+j];

//tiff图片是从左上到右下,bmp图片是从左下到右上

//创建bmp图片

bmp=fopen(argv[2],"wb");

if(bmp==NULL)

{

printf("open new file error\n");

return -1;

}

//写入相应的数据

fwrite(bm,1,2,bmp);

fwrite(&bmphead,1,12,bmp);

fwrite(&infohead,1,40,bmp);

fwrite(color,1,256*sizeof(color),bmp);

fwrite(index,1,infohead.readSize,bmp);

fclose(bmp);

//释放有关资源

free(buffer);

free(color);

free(index);

TIFFClose(image);

fclose(bmp);

return 0;

}

精雕JDPaint快捷键大全

北京精雕快捷键表格

选择工具下的快捷键 1、文件 Ctrl+O:打开Ctrl+S:保存Ctrl+N:新建Ctrl+Z:返回2、视图F4:旋转观察F5:窗口观察F6:全部观察F7:选择观察F8:上次观察F12:全屏观察

Ctrl+R:重画 Ctrl+E:自动导行Ctrl+D:正交捕捉3、绘制 Ctrl+Q:直线 Ctrl+P:样条 Ctrl+L:圆 Ctrl+A:圆弧 Ctrl+W:多义线Ctrl+T:矩形 4、编辑 Ctrl+Y:重做 Ctrl+C:复制 Ctrl+X:剪切 Ctrl+V:粘贴 Ctrl+1:区域等距Ctrl+2:区域连接Ctrl+3:区域焊接Ctrl+4:区域求交Ctrl+5:单线等距Ctrl+6:连接 Ctrl+7:修剪 Ctrl+8:剪切 Ctrl+9:延伸 DEL:删除 5、变换 Alt+1:平移 Alt+2:旋转 Alt+3:镜像 Alt+4:缩放 Alt+F2:集合 Alt+F3:取消集合Ctrl+6:并入3D环境 虚拟雕塑工具下的快捷键 1、文件 Ctrl+O:打开Ctrl+S:保存Ctrl+N:新建Ctrl+Z:返回3、视图 F4:旋转观察F5:窗口观察 F6:全部观察 F7:选择观察 F8:上次观察 F12:全屏观察Ctrl+R:重画 Ctrl+E:自动导行

Ctrl+D:正交捕捉4、绘制 Ctrl+Q:直线 Ctrl+P:样条 Ctrl+L:圆 Ctrl+A:圆弧 Ctrl+W:多义线Ctrl+T:矩形 5、编辑 Ctrl+Y:重做 Ctrl+C:复制 Ctrl+X:剪切 Ctrl+V:粘贴 Ctrl+1:区域等距Ctrl+2:区域连接Ctrl+3:区域焊接Ctrl+4:区域求交Ctrl+5:单线等距Ctrl+6:连接 Ctrl+7:修剪 Ctrl+8:剪切 Ctrl+9:延伸DEL:删除 6、变换 Alt+1:平移 Alt+2:旋转 Alt+3:镜像Alt+4:缩放 Alt+F2:集合 Alt+F3:取消集合 Ctrl+6:并入3D环境 7、橡皮 Shift+T:擦除 Shift+G:整体固化 8、几何 Alt+X:扫掠面 Alt+Z:单线浮雕 Alt+Q:延伸面 9、导动 Shift+A:导动堆料 Shift+S:导动去料 Shift+J:导动磨光 Shift+I:消除锯齿 Shift+L:特征磨光 10、颜色 Shift+O:涂抹颜色 Shift+X:种子填色 Shift+V:等高填色 Shift+Z:单线填色 Shift+C:区域填色 Shift+L:颜色区域矢量化11、效果 Shift+E:磨光 12、选项

数字图像处理报告 图像二值化

数字图像处理实验报告 实验二灰度变换 实验目的:通过实验掌握灰度变换的基本概念和方法 实验内容: 掌握基本的灰度变换:图像反转、对数变换、幂次变换和二值化1.图像反转、对数变换、幂次变换 I=imread('fengjing.jpg'); J=im2double(I); subplot(2,3,1),imshow(J); title('原图'); K=255-I; subplot(2,3,2),imshow(K); title('图象反转'); L=3.*log(1+J); subplot(2,3,3),imshow(L);title('图象对数,系数为3'); M=10.*log(1+J); subplot(2,3,4),imshow(M);title('图象对数,系数为10'); N=10.*(J.^0.2); subplot(2,3,5),imshow(N);title('图象指数变换,γ=0.2'); P=10.*(J.^2.5); subplot(2,3,6),imshow(P);title('图象指数变换,γ=2.5'); 2.图象二值化 方法一:

I=imread('fengjing.jpg'); % 确定大小subplot(1,2,1),imshow(I);title('原图象'); [m,n]=size(I); for i=1:m for j=1:n if I(i,j)<128 I(i,j)=0; else I(i,j)>=128 & I(i,j)<256 I(i,j)=255; end end end subplot(1,2,2),imshow(I);title('图象二值化');方法二: I=imread('fengjing.jpg'); % 确定大小subplot(1,2,1),imshow(I);title('原图象'); J=find(I<128); I(J)=0; J=find(I>=128); I(J)=255; title('图像二值化(阈值为128)'); subplot(1,2,2),imshow(I);title('图象二值化');

图像二值化算法研究与实现

图像二值化算法研究与实现 摘要:图像二值化是图像预处理中的一项重要技术,在模式识别、光学字符识别、医学成像等方面都有重要应用。论文介绍了图像及数字图像处理技术的一些概念和相关知识;对VC++ 软件的发展和软件在图像处理中的应用做了简要介绍;还介绍了图像二值化算法以及利用VC++软件工具进行算法的实现。论文重点实现了图像分割技术中常用灰度图像二值化算法,如Otsu算法、Bernsen算法,并对这些算法运行的实验结果进行分析与比较。 关键词:图像处理;二值化;VC++; 1.引言 1.1 图像与数字图像 图像就是用各种观测系统观测客观世界获得的且可以直接或间接作用与人眼而产生视觉的实体。视觉是人类从大自然中获取信息的最主要的手段。拒统计,在人类获取的信息中,视觉信息约占60%,听觉信息约占20%,其他方式加起来才约占20%。由此可见,视觉信息对人类非常重要。同时,图像又是人类获取视觉信息的主要途径,是人类能体验的最重要、最丰富、信息量最大的信息源。通常,客观事物在空间上都是三维的(3D)的,但是从客观景物获得的图像却是属于二维(2D)平面的。 数字图像:数字图像是将连续的模拟图像经过离散化处理后得到的计算机能够辨识的点阵图像。在严格意义上讲,数字图像是经过等距离矩形网格采样,对幅度进行等间隔量化的二维函数。因此,数字图像实际上就是被量化的二维采样数组。 1.2 数字图像处理技术内容与发展现状 数字图像处理就是采用一定的算法对数字图像进行处理,以获得人眼视觉或者某种接受系统所需要的图像处理过程。图像处理的基础是数字,主要任务是进行各种算法设计和算法实现。 图像处理技术的发展大致经历了初创期、发展期、普及期和实用化期4个阶段。初创期开始与20世纪60年代,当时的图像采用像素型光栅进行少秒显示,大多采用中、大型机对其处理。在这一时期,由于图像存储成本高、处理设备昂贵,其应用面很窄。进入20世纪70年代的发展期,开始大量采用中、小型机进行处理,图像处理也逐渐改用光栅扫描方式,特别是CT和卫星遥感图像的出现,对图像处理技术的发展起到了很好的推动作用。到了20世纪80年代,图像处理技术进入普及期,此时的微机已经能够担当起图形图像处理的任务。超大规模集成电路(Very Large Scale Integration, VLSI)的出现更使处理速度大大提高,设备造价也进一步降低,极大地促进了图形图像系统的普及和应用。20世纪90年代是图像处理技术的实用化时期,图像处理的信息量巨大,对处理速度的要求极高。 1.3 图像二值化原理及意义 图像二值化是指用灰度变换来研究灰度图像的一种常用方法,即设定某一阈值将灰度

精雕软件简单教程

精雕软件简单教程 发布:2014-05-22 ?阅读:459 您的雕刻机软件会操作了吗,慢慢学习吧,泽凯数控设备有限公司帮助您 在数控雕刻机使用过程中,精雕、文泰、type3、ug等软件是客户必须用的,只不过客户根据自己的习惯会选用不同的设计软件。其中精雕是目前使用率比较广泛的设计软件之一,它能很轻松的完成各种浮雕的雕刻路径设置。但对于很多初学者,精雕还是比较难的,因为更多人不知道如何入门。我们简单介绍一下精雕的如何教程。 解压后无需安装,将JDPait和NCservert创建快捷方式托至桌面 1. 运行雕刻机精雕软件(JDPaint)之前先运行NC路径转换器(NCserver) 2.打开精雕软件 3. 输入图片 点击【文件】——【输入】——【点阵图像】——找到要刻的灰度图(一般为bmp格式)——打开 4.调整图片大小 选中图片——点击【变换】——【放缩】——设置合适的尺寸——确定 ? 5.生成浮雕曲面 点击【艺术曲面】——【图像纹理】——【位图转成网格】——点击图片——设置合适的曲面高度 向变换 将图片拖至其他位置与网格分离——选中网格——点击【虚拟雕塑工具】——点击【模型】——Z向变换——点击将高点移至XOY平面

7.做路径 点击【选择工具】——选中网格——点击【刀具路径】——【路径向导】——选择曲面精雕刻——下一步——选择合适的刀具(刀具库中没有的刀具可以双击其中一把刀具将其参数修改后确定)——下一步(使用维宏控制系统的无需选材料)——将雕刻机雕刻路径参数中的路径间距重新设置(一般将重叠率调至20%-35%)——完成 8.输出路径 拉框选中已经做好的路径——点击【刀具路径】——输出刀具路径——找到要保存的位置并命名后点击保存———ENG文件格式选择,输出原点处点击【特征点】选择路径左下角——确定——将NC路径转换器的文件头尾设置全部清空——点击【生成】 ? 9.将做好的NC文件导入雕刻机控制系统(维宏控制)按照维宏控制操作说明进行操作即可完成雕刻。

图像二值化中阈值选取方法研究

目录 摘要 ................................................................. III Abstract............................................................... IV 第一章绪论. (1) 1.1 图像与数字图像 (1) 1.2 数字图像处理技术内容与发展现状 (2) 1.3 灰度图像二值化原理及意义 (4) 第二章软件工具——MATLAB (6) 2.1 MATLAB概述 (6) 2.2 MATLAB的工作环境 (6) 2.3 MATLAB图像处理工具箱 (8) 2.4 工具箱实现的常用功能 (9) 第三章图像二值化方法 (11) 3.1 课题研究对象 (11) 3.2 二值化方法研究动态 (13) 3.3 全局阈值法 (18) 3.4 局部阈值法 (18) 第四章 Otsu方法和Bernsen方法 (20) 4.1 Otsu算法分析 (20) 4.2 Otsu方法流程图 (22) 4.3 Bernsen算法分析 (23) 4.4 Bernsen方法流程图 (23) 第五章 Otsu方法和Bernsen方法实验比较 (25) 5.1 Otsu方法实验结果分析 (25)

5.2 Bernsen方法结果分析 (27) 5.3 0tsu方法和Bernsen方法实验结果比较 (28) 5.4 结论 (29) 结束语 (31) 参考文献 (32) 致谢 (33) 附录:源代码 (34)

摘要 在人类获取的信息中,视觉信息约占60%,听觉约占20%,其它约占20%。由此可见,视觉信息对人类非常重要。同时,图像是人类获取视觉信息的主要途径。图像二值化是图像预处理中的一项重要技术,在模式识别、光学字符识别、医学成像等方面都有重要应用。论文介绍了图像及数字图像处理技术的一些概念和相关知识;对Matlab7.0 软件的发展和软件在图像处理中的应用做了简要介绍;还介绍了灰度图像二值化方法以及利用Matlab7.0软件工具进行算法的实现。课题重点实现了图像分割技术中灰度图像二值化方法,如Otsu算法、Bernsen算法,并对这些算法运行的实验结果进行分析与比较。 关键词:图像处理,二值化,Matlab,Otsu算法,Bernsen算法

灰度图像二值化方法matlab代码

OTSU算法代码: I=imread('****'); th=graythresh(I); J=im2bw(I,th); subplot(121) imshow(I); subplot(122) imshow(J); Bernsen算法代码: clc; clear all close all I=imread('****'); [m,n] = size(I); I_gray=double(I); T=zeros(m,n); M=3; N=3; for i=M+1:m-M for j=N+1:n-N max=1;min=255; for k=i-M:i+M for l=j-N:j+N if I_gray(k,l)>max max=I_gray(k,l); end if I_gray(k,l)

for i=1:m for j=1:n if I_gray(i,j)>T(i,j) I_bw(i,j)=255; else I_bw(i,j)=0; end end end subplot(121),imshow(I); subplot(122),imshow(I_bw); 改进的Bernsen算法代码:clc; clear all close all I=imread('****'); I_gray=double(I); [m,n] = size(I); a=0.3; A=0;T1=0;S=0; for i=1:m for j=1:n A=A+I_gray(i,j) ; end end A=A*0.9; while(S

灰度图像二值化方法研究

灰度图像二值化方法研究 摘要:在人类获取的信息中,视觉信息约占60%,听觉约占20%,其它约占20%。由此可见,视觉信息对人类非常重要。同时,图像是人类获取视觉信息的主要途径。图像二值化是图像预处理中的一项重要技术,在模式识别、光学字符识别、医学成像等方面都有重要应用。论文介绍了图像及数字图像处理技术的一些概念和相关知识;对Matlab7.0 软件的发展和软件在图像处理中的应用做了简要介绍;还介绍了灰度图像二值化方法以及利用Matlab7.0软件工具进行算法的实现。课题重点实现了图像分割技术和边缘检测中灰度图像二值化方法,如Otsu算法、Bernsen算法,并对这些算法运行的实验结果进行分析与比较。 关键词:图像处理;边缘检测;二值化;Matlab;Otsu算法;Bernsen算法 Gray image binarization method Abstract:Human beings obtain a lot of information, among which the visual information is about 60%, the sense of hearing about 20%, and others about 20%. Therefore, the visual information is very important for human beings. Moreover, the images are the primary way, by which a lot of information is obtained. Image binarization, as an important technology in image pre-processing, is widely-employed in pattern recognition, optical character recognition, medical imaging and so forth. In this paper, some notions and relative knowledge in digital image processing technology are introduced; then, the development of Matlab7.0 and its application in image processing briefly introduced; in addition, the method of grayscale image binarization and how to implement these algorithms based on Matlab7.0 are presented. This paper mainly implements the grayscale image binarization method in image segmentation technology and Marginal Detection , such as Otsu algorithm and Bernsen algorithm, and analyzes and compares the experimental results of the above algorithms. Keywords:Image processing;Marginal Detection;Binarization, Matlab;Otsu algorithm;Bernsen algorithm

灰度图像二值化处理

内蒙古科技大学本科毕业论文 二〇一二年四月

摘要 本文介绍了图像及数字图像处理技术的一些概念和相关知识;还介绍了灰度图像和图像二值化的概念及其表示形式;对图像灰度化和图像二值化的优缺点作了简单的的介绍;重点介绍了灰度图像的二值化方法研究,其包括的内容有二值化研究动态和研究方法;对全局阈值法;局部阈值法这两种方法进行了研究讨论。关键字:图像处理、二值化、图像、阈值

Abstract This paper introduces the image and digital image processing technology of some concepts and related knowledge; also introduced the gray-scale image and the images of the two values of the concept and its representation; grayscale images and images of the two values of the advantages and disadvantages to make simple introduction; mainly introduces two gray image binarization method, its includes the contents of two values of research and research methods; the global threshold method; local threshold method, the two methods are discussed. Keywords:image processing, image, threshold value of two,

灰度图转浮雕

灰度图转浮雕简易处理步骤 灰度图转浮雕简易处理过程(入门) 发这个贴,算是给新人和自己上个小课吧。当是无脑输出。 刚好给客户完成一张抽屉面的图,规格为61*395.就以此为例吧。原图如下: 第一步:打开精雕软件,文件-输入-点阵图像-选择指定图像(注意文件 类型)〈图1〉 第二步:绘制所需尺寸图形,绘制-矩形(随意画个)-选中矩形-变换- 放缩(输入395*61);编辑-单线等距-选中矩形向内偏移4MM(起外框线条)-'绘制,矩形'以内框左上角为起点按住SHIFT拉伸差不多8MM左右放手〈图21〉-'编辑修剪'点选内框和小矩形-右键确认,左键修剪掉内框左上角线条-'编辑,倒圆角'-输入半径5右键(注意左右下角)-右键确认上圆角<图22>;给外框上中心线修剪掉内框除左上角部分的其它三部分〈图23〉-点选左上角部分‘变换镜像’以为中心线为轴对称(注意右上角选复制图形)-‘编辑,连接’内框-‘单线等距’向外偏移4MM;点选灰度图按住SHIFT移动图像到方框内并放缩至合适位置(尽量别去让图像变形;小技巧:拉伸时按住CTRL同时两边 拉伸)〈图24〉。

第三步:灰度转浮雕,艺术曲面-图像处理-位图转网格(注意左下角出现: 点选一位图)-点击图像-弹出窗口输入需要的曲面高度(我这里为3.5MM);右向左框选曲面按6进入‘虚拟雕塑环境’F6‘全局观察’-‘雕塑,冲压’去掉外框线 条〈图32〉。

第四步(重要部分,个人技巧):完善灰度图转浮雕,去掉中心线-‘颜色, 等高填色’(注意右上角,如图41设置)-点击浮雕(如图42效果)-再次在龙头外线点击(龙头明显还有水纹,直到把多余水纹填色掉,如图43)-‘颜色,颜色区域矢量化’生成外框线(小技巧:这个还有另外一个快捷键是/)-‘效果,磨光’多磨几次直到表面光滑,当然图像不能模糊了;接下来这个步骤很重要雕出来好不好看就看这了,‘冲压’右边选颜色内,SHIFT+左键拾取填充的颜色-左键冲压闭合区域(图中有三个位置注意了)-如是正版5.5支持‘特征,削除锯 齿’加以应用下,定更接近美感。

精雕灰度图转浮雕的做法

精雕灰度图转浮雕的做法: 首先打开精雕作图软件如图,打开之后点击屏幕左上方的“文件”如图 ,找到目录下的“输入”然后找到“点阵图像”单击文件类型选择(*.bmp),找到 所需要加工的图打开,如:打开之后看一下图的尺寸是否是你需要加工的尺寸,如果不是那就需要修改一下图的加工尺寸 首先选中图片,单击屏幕左上方的“变换”,找到目录下的“放缩”(快捷键Alt+4),如图

假如雕刻尺寸是200X200 (MM)只要修改横向尺寸为200,点一下“保持比例”就可以了,纵向尺寸就自动变到200, 如果你雕刻的尺寸是不规则的,比如是200X100(mm)那就横向尺寸改到200,纵向尺寸改成100,这次不需 要点击“保持比例”,尺寸修改完之后,点击屏幕中心上方的“艺术曲面”,找到目录下的“图像纹理”——单击“位图转网格”,这是把鼠标放到图片上点击一下会出现如图:

需要修改一下你的加工工件的雕刻深度如图: 如果雕刻是3毫米,输入3就可以了,然后点击

“确定”,出现如图出现一个网格,这个网格就是我们用灰度图转出来的浮雕图,然后我们把灰度图移开或是删除,现在我们开始绘制一个矩形,单击屏幕左上方的“绘制”,找到目录下的“矩形”(Ctrl+T)点击,找到空白处单击鼠标左键,移动鼠标出现矩形再次点击鼠标左键,就绘制出一个矩形,然后单击鼠标右键退出,选中矩形单击“变换”目录下的——“尺寸等同”,这是用鼠标左键单 击以下网格出现如图:选择双向尺寸等同之后点击确定,此时矩形和网格一样大,然后再单击屏幕右侧工具栏的“对齐”,找到目录 下的如图:点击,现在用鼠标左键单击网格出现如下图:

图像二值化及模板匹配matlab实现

图像二值化 图像的二值化处理(4张) 就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,首先,图像的二值化有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。其次,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像。所有灰度大于或等于阀值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。 使用matlab编程实现两幅图像的块匹配操作 其中 rgb_image=imread('A.bmp'); gray_image=rgb2gray(rgb_image); image=double(gray_image); ed_image=image; rgb_back=imread('B.bmp'); 红色部分表示要匹配的两张图片 附件所含文件: 附件中m文件代码: 复制内容到剪贴板 代码: clear; echo off; % for g=267 % a1=imread([num2str(g),'.jpg']); rgb_image=imread('A.bmp'); gray_image=rgb2gray(rgb_image);

image=double(gray_image); ed_image=image; rgb_back=imread('B.bmp'); gray_back=rgb2gray(rgb_back); back=double(gray_back); [y1,y2,x1,x2]=rowcol(back,image); [M,N]=size(back); %%%%%%%%%%%%%%%%%%%%%%%%%%%%% %相关系数法%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for i=x1:5:x2 for j=y1:5:y2 I=image(i:i+4,j:j+4);%块 T=back(i:i+4,j:j+4); aver_I=mean(mean(I));%块均值 aver_T=mean(mean(T)); sub_I=I(1:5,1:5)-aver_I;%每块与均值之差 squ_sub_I=sub_I.*sub_I;%差值平方 sum_sub_I=sum(sum(sub_I)); %差值之和 sum_squ_sub_I=sum(sum(squ_sub_I));%差值平方和 sub_T=T(1:5,1:5)-aver_T; squ_sub_T=sub_T.*sub_T; sum_sub_T=sum(sum(sub_T)); sum_squ_sub_T=sum(sum(squ_sub_T)); mul=sub_I.*sub_T; sum_mul=sum(sum(mul)); %分子 R=sum_mul/((sqrt(sum_squ_sub_I))*(sqrt(sum_squ_sub_T))); if R>0.9 image(i:i+4,j:j+4)=255; end end end image(x1:x2,y1)=255; image(x1:x2,y2)=255; image(x1,y1:y2)=255; image(x2,y1:y2)=255; h=mat2gray(image); figure,imshow(h) ed1=edge(ed_image,'canny',0.08); ed2=edge(ed_image,'prewitt',14); ed=ed1&ed2; % figure,imshow(ed) % figure,imshow(ed1) % figure,imshow(ed2)

图片的黑白处理(二值化)

图片的黑白处理(二值化) 原始圖片 黑白處理后圖片 原始圖片: 黑白處理后圖片: 部分处理代码: https://www.360docs.net/doc/628276094.html, code …… Dim ts2 As IThresholder = New GlobalMeanThreshold(inbmp) Dim tsBMP As New Bitmap(PictureBox1.Width, PictureBox1.Height) ts2.RenderToBitmap(tsBMP) PictureBox6.Image = tsBMP PictureBox6.Height = PictureBox1.Height PictureBox6.Width = PictureBox1.Width PictureBox6.Left = 0 PictureBox6.Top = 0 …… 理论知识: 灰度图像的二值化处理就是讲图像上的点的灰度置为0或255,也就是讲整个图像呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,特别是在实用的图像处理中,以二值图像处理实现而构成的系统是很多的,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像,这样子有利于再对图像做进一步处理时,图像的集合性质只与像素值为0或255的点的位置有关,不再涉及像素的多级值,使处理变得简单,而且数据的处理和压缩量小。为了得到理想的二值图像,一般采用封闭、连通的边界定义不交叠的区域。所有灰度大于或等于阀值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。如果某特定物体在内部有均匀一致的灰度值,并且其处在一个具有其他等级灰度值的均匀背景下,使用阀值法就可以得到比较的分割效果。如果物体同背景的差别表现不在灰度值上(比如纹理不同),可以将这个差别特征转换为灰度的差别,然后利用阀值选取技术来分割该图像。动态调节阀值实现图像的二值化可动态观察其分割图像的具体结果。 灰度图像的二值化没有固定的算法,根据图像区域中目标物体的不同而有不同的二值化算法.目前最主要的方法有:最大值法,平均值法,加权平均值法 如下边代码: Private Function SetBitMapToBlackAndWhite(bmp As Bitmap) As Bitmap

图像处理系列方法之二——图像二值化固定阀值法

图像二值化固定阀值法 一 功能 用固定阀值法对图像进行黑白二值化处理。 二 原理 图像二值化是通过设定某个阀值,把具有灰度级的图像变换成只有两个灰度级的黑白图像。设输入图像为f ( x, y ),二值化后的图像为g ( x, y ), 阀值为T, 那么图像二值化的方法为: ???<≥=T y x f T y x f y x g ),(,0),(,255),( 三 使用说明 1) 打开CCS ,选择 C5402 Device Simulator 环境。 2) 打开工程:在 [Project] 菜单中选择 [Open] 选项,然后在打开的对话框中打开---- \ erzhi \ image912.pjt 。 3) 编译链接:在 [Project] 菜单中选择 [Rebuild All] 选项。 4) 载入程序:选择 [File] 菜单中的[Load Program] 选项,在打开的对话框中打开----\ erzhi \ Debug \ imag912.out 。 5) 将待处理的位图文件(如lena.bmp )复制到文件夹----\ erzhi \ Debug 中。 6) 运行程序:在 [Debug] 菜单中选择Run 选项;根据output window 中的提示在弹出的第一个对话框中输入待处理的文件名(如 lena.bmp ),在第二个对话框中输入二值化阀值(如100);在output window 中出现 ”zz ” 指示运行结束。 7) 查看结果:打开----\ erzhi \ Debug \ lena.bmp 位图文件,查看运行结果。 四 效果演示 下面左图为待处理的原图,右图为以100做为阀值处理后的二值化图像。

精雕软件教程

精雕软件教程 1. 运行雕刻机精雕软件(JDPaint)之前先运行NC路径转换器(NCserver) 2.打开精雕软件 3. 输入图片点击【文件】——【输入】——【点阵图像】——找到要刻的灰度图(一般为bmp格式)——打开 4.调整图片大小选中图片——点击【变换】——【放缩】——设置合适的尺寸——确定 5.生成浮雕曲面点击【艺术曲面】——【图像纹理】——【位图转成网格】——点击图片——设置合适的曲面高度向变换将图片拖至其他位置与网格分离——选中网格——点击【虚拟雕塑工具】——点击【模型】——Z向变换——点击将高点移至XOY平面 7.做路径点击【选择工具】——选中网格——点击【刀具路径】——【路径向导】——选择曲面精雕刻——下一步——选择合适的刀具(刀具库中没有的刀具可以双击其中一把刀具将其参数修改后确定)——下一步(使用维宏控制系统的无需选材料)——将雕刻机雕刻路径参数中的路径间距重新设置(一般将重叠率调至20%-35%)——完成8.输出路径拉框选中已经做好的路径——点击【刀具路径】——输出刀具路径——找到要保存的位置并命名后点击保存———ENG文件格式选择,输出原点处点击【特征点】选择路径左下角——确定——将NC路径转换器的文件头尾设

置全部清空——点击【生成】9.将做好的NC文件导入雕刻机控制系统(维宏控制)按照维宏控制操作说明进行操作即可完成雕刻 精雕软件教程 画图片 1.打开精雕软件; 2.文件→输入→点阵图像; 3.桌面→练习图片→文件类型(jpg)→空白点(右键)→查 看(微略图滚动选择)→打开; 4.点左键; 5.选中后加锁→已选对象加锁→右键; 6.绘制→多义线→样条曲线; 7.shift+右键用来移动图片;【抓手工具】 8.从最高处开始画; 9.打开端点(捕捉点)和最近点,其余关闭; 10.用L是退一步(线条的返回); 11.用Delete来删除(或用Χ) 图像的旋转

深度图像的二值化

3.2 深度图像二值化 图像二值化是图像处理中的一项基本技术,也是很多图像处理技术的预处理过程。在颗粒分析、模式识别技术、光学字符识别(OCR)、医学数据可视化中的切片配准等应用中,图像二值化是它们进行数据预处理的重要技术。由于图像二值化过程将会损失原图像的许多有用信息,因此在进行二值化预处理过程中,能否保留原图的主要特征非常关键。在不同的应用中,图像二值化时阈值的选择是不同的。因此,自适应图像阈值的选取方法非常值得研究。研究者对图像二值化方法进行了讨论,在此基础上提出了一个新的图像二值化算法。该算法基于数学形态学理论,较好地保留了图像二值化时原图的边缘特征。本文主要研究二值化及灰度图像二值化方法。 3.2.1.灰度图像与二值图像 数字图像是将连续的模拟图像经过离散化处理后得到的计算机能够辨识的点阵 图像。在严格意义上讲,数字图像是经过等距离矩形网格采样,对幅度进行等间隔量化的二维函数。因此,数字图像实际上就是被量化的二维采样数组。一幅数字图像都是由若干个数据点组成的,每个数据点称为像素(pixel)。比如一幅 256×400,就是指该图像是由水平方向上256列像素和垂直方向上400行像素组成的矩形图。每一个像素具有自己的属性,如颜色(color)、灰度(grayscale)等,颜 色和灰度是决定一幅图像表现里的关键因素。数字图像又可分为彩色图像、灰度图像、二值图像。 3.2.1.1彩色图像 彩色图像是多光谱图像的一种特殊情况,对应于人类视觉的三基色即红(R)、绿(G)、蓝(B)三个波段,是对人眼的光谱量化性质的近似。彩色图像中的 每个像素的颜色有R、G、B三个分量决定,而每个分量有255种值可取,这样一个像素点可以有1600多万的颜色的变化范围。而灰度图像是R、G、B三个分量相同的一种特殊的彩色图像,一个像素点的变化范围为255种。图1-1为彩色图像。

精雕常用快捷键

新建Ctrl +N 建立新文挡打开Ctrl+O 打开一个现有的文档 保存Ctrl+S 保存活动文档窗口观察F5 对图形进行窗口放大 全部观察F6 将所有的图形显示到整个工作窗口 选择观察F7 将选择的图形显示到整个工作窗口 上次观察F8 恢复到上次的工作窗口全屏观察F12 开启或关闭全屏绘图模式 重画Ctrl+R 重新显示工作窗口正交捕捉Ctrl+D 开启或关闭正交捕捉模式 特征点自动捕捉Ctrl+E 开启或关闭特征点自动捕捉模式 显示填充Ctrl+F 显示或隐藏填充颜色 直线Ctrl+Q 绘制直线圆弧Ctrl+A 绘制圆弧 多义线Ctrl+W 绘制多义线撤消Ctrl+Z 撤消一步操作 剪切Ctrl+X 剪切被选对象,并将其置于剪贴板上 复制Ctrl+C 复制被选对象,并将其置于剪贴板上 删除Del 删除被选对象切断Alt+1 图形切断 修剪Alt+2 图形快速裁剪延伸Alt+3 非闭合图形延伸 倒圆角Alt+4 倒斜角Alt+5 连接Alt+6 区域等距Ctrl+1 计算轮廓曲线区域的等距线 区域焊接Ctrl+2 曲线轮廓区域的求并运算区域剪裁Ctrl+3 曲线轮廓区域的相减运算区域相交Ctrl+4 曲线轮廓区域的求交集运算集合Alt+F2 将被选图形组合为一个集合取消集合Alt+F3 将被选图形打散成为单个图形1——笔刷恢复为默认值 2——改变颜色模板选项3——改变拼合方式选项(磨光模式下:保留硬边)4——改变高度模式选项5——改变半衰直径比例 6——进入虚拟雕塑7——进入选择工具 8——进入节点编辑工具9或0——选择导动笔刷类型 Q,W——刷子高度减/增A,S——刷子尺寸减/增 Z,X——取消/恢复D,F——半衰直径减/增 E——图形隐藏/显示R——模型隐藏/显示 B——流动层整体着色P——自动分色 N——整体擦除颜色V——绘制多义线 C——精细/粗糙显示M——模型颜色顺序置为当前颜色 空格键——擦掉悬空的单线颜色,单线分割模型填色或模型区域填色 SHIFT+左键——设置当前颜色(在有颜色模板的情况下有效) /——颜色区域矢量化,单线区域填色和区域提取 ,——显示/隐藏单线。——显示/隐藏区域 T——显示/隐藏非工作区G——显示/隐藏模型颜色 Y——显示/隐藏零平面多边形SHIFT+Q——堆料 SHIFT+W——去料SHIFT+E——磨光 SHIFT+R——冲压SHIFT+A——导动堆料 SHIFT+S——导动去料SHIFT+D——区域浮雕 SHIFT+F——颜色浮雕SHIFT+G——整体固化 SHIFT+H——模型属性 SHIFT+Z——单线填色(在这个命令中CTRL+鼠标左键是种子填色) SHIFT+X——种子填色SHIFT+C——区域填色 SHIFT+V——等高填色SHIFT+B——进入地图显示模式 SHIFT+N——进入图形显示模式SHIFT+M——进入灰度图象显示模式

(5)(a)图像处理-图像的二值化---迭代法

图像的二值化—迭代法 迭代法过程: (1).选取一个T的初始值(一般使用图像的灰度平均值) (2).用T分割图像。这样变会产生两组像素的集合:G1由所有灰度级大于T的像素组成,G2由所有灰度级小于或等于T的像素组成 (3).对区域G1和G2求平均灰度值g1和g2 (4).计算新的阈值T=(g1+g2)/2 重复步骤2~4直到相邻两次计算所得T只差小于一定值。 具体代码如下(原图已灰度化的基础上操作): void CDipView::OnThreshold() { CDipDoc*pDoc=GetDocument(); if(!(pDoc->m_pBmi&&pDoc->m_pBmData)) { MessageBox(_T("No Object"),MB_OK); } else { int i_top=pDoc->m_pBmi->bmiHeader.biHeight; int j_top=pDoc->m_pBmi->bmiHeader.biWidth*3; int w=pDoc->m_pBmi->bmiHeader.biSizeImage/i_top; int a1=0,b1=1,a2=0,b2=1;//防止除数为零 BYTE t0=0; BYTE s=0; for(int i=0;im_pBmData[i*w+j]; } } t0=s/(i_top*j_top/3); t=t0; //迭代接近求出全局灰度

for(int k=0;k<50;k++) { for(int i=0;im_pBmData[i*w+j]>t) { a1=a1+pDoc->m_pBmData[i*w+j]; b1++; } else { a2=a2+pDoc->m_pBmData[i*w+j]; b2++; } } } t=(a1/b1+a2/b2)/2; if(abs(t-t0)<0.5) { break; } else { t0=t; } } ///////判断灰度级是否大于全局阈值////// for(int i=0;im_pBmData[i*w+j]=pDoc->m_pBmData[i*w+j]>t?255:0; pDoc->m_pBmData[i*w+j+1]=pDoc->m_pBmData[i*w+j+1]>t?255:0; pDoc->m_pBmData[i*w+j+2]=pDoc->m_pBmData[i*w+j+2]>t?255:0; } } Invalidate(); } }

ZBrush图片转浮雕方法

ZBrush图片转浮雕方法 【效果展示】 今天阿巴赛来教大家怎么方便快速地将二维的图片转成三维的浮雕。最终效果如图1所示,上面是一张图,下面是由这张图通过ZBrush做出的浮雕效果。 图1 ZBrush将图片转浮雕效果 【准备素材】 ZBrush软件,一张浮雕灰度图,待加浮雕模型。 ZBrush的软件介绍在以前的教程中已经提到,相信大家都很熟悉,这里不做具体介绍了。什么是浮雕灰度图?首先,灰度图用我们通常的俗话来说就是黑白图片,当然黑白图片不止有黑色和白色,还有灰色。它是和彩色图片相对的。浮雕灰度图是指用颜色来表示物体局部远近关系的图片,专门作为做浮雕。颜色越接近白色,表示离观察者越近;反之颜色月接近黑色,表示离观察者越远。通常黑色部分表示该图片转为浮雕时不被雕刻。比如图1中牛的浮雕灰度图,因为牛头离我们较近,颜色就更白一些。 【制作原理】 ZBrush软件有个很不错的工具,叫Alpha通道。它是用来控制笔刷的形状的。更不错的是,它还能以图片作为Alpha通道。其实,它是将图片的颜色信息作为强度的控制,黑色表示笔刷强度为0%,白色表示笔刷强度为100%。这样的处理方式正好吻合了浮雕灰度图

制作的本意,故利用此工具可以直接将二维浮雕灰度图转化为三维浮雕的效果。 【操作演示】 这里我们将霸气侧漏的牛浮雕贴在一个3D扫描人像的身上。 Step 1:导入模型 在右侧的托盘中点击【Tool(工具)】-【Import(导入)】,选择模型,在画布中拖拽出来即可。打开上方工具栏中的【Edit(编辑)】,模型如图2所示。 图2 待加浮雕模型 Step 2:细分模型 由于三角网格模型是有点决定模型的形状,想要制作精细的浮雕,模型必须有足够多的点。我们需要细分该模型,点击【Tool(工具)】-【Geometry(几何)】-【Divide(细分)】,将模型细分至一百万左右。将鼠标放在工具菜单里的该模型上,则可以看到该模型的点面数信息,如图3所示。 图3 模型的点面数信息

相关文档
最新文档