




已阅读5页,还剩49页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数字图像处理领域的二十四个典型算法及vc实现、第一章一、256色转灰度图二、Walsh变换三、二值化变换四、阈值变换五、傅立叶变换六、离散余弦变换数字图像处理领域的二十四个典型算法及vc实现、第二章七、高斯平滑八、图像平移九、图像缩放十、图像旋转数字图像处理领域的二十四个典型算法及vc实现、第三章 图像处理,是对图像进行分析、加工、和处理,使其满足视觉、心理以及其他要求的技术。图像处理是信号处理在图像域上的一个应用。目前大多数的图像是以数字形式存储,因而图像处理很多情况下指数字图像处理。 本文接下来,简单粗略介绍下数字图像处理领域中的24个经典算法,然后全部算法用vc实现。由于篇幅所限,只给出某一算法的主体代码。 ok,请细看。一、256色转灰度图算法介绍(百度百科): 什么叫灰度图?任何颜色都有红、绿、蓝三原色组成,假如原来某点的颜色为RGB(R,G,B),那么,我们可以通过下面几种方法,将其转换为灰度: 1.浮点算法:Gray=R*0.3+G*0.59+B*0.11 2.整数方法:Gray=(R*30+G*59+B*11)/100 3.移位方法:Gray =(R*28+G*151+B*77)8; 4.平均值法:Gray=(R+G+B)/3; 5.仅取绿色:Gray=G; 通过上述任一种方法求得Gray后,将原来的RGB(R,G,B)中的R,G,B统一用Gray替换,形成新的颜色RGB(Gray,Gray,Gray),用它替换原来的RGB(R,G,B)就是灰度图了。灰度分为256阶。所以,用灰度表示的图像称作灰度图。程序实现: ok,知道了什么叫灰度图,下面,咱们就来实现此256色灰度图。这个Convert256toGray(),即是将256色位图转化为灰度图:voidConvert256toGray(HDIB hDIB)LPSTRlpDIB;/ 由DIB句柄得到DIB指针并锁定DIBlpDIB = (LPSTR) :GlobalLock(HGLOBAL)hDIB);/ 指向DIB象素数据区的指针LPSTR lpDIBBits;/ 指向DIB象素的指针BYTE *lpSrc;/ 图像宽度LONGlWidth;/ 图像高度LONG lHeight;/ 图像每行的字节数LONGlLineBytes;/ 指向BITMAPINFO结构的指针(Win3.0)LPBITMAPINFO lpbmi;/ 指向BITMAPCOREINFO结构的指针LPBITMAPCOREINFO lpbmc;/ 获取指向BITMAPINFO结构的指针(Win3.0)lpbmi = (LPBITMAPINFO)lpDIB;/ 获取指向BITMAPCOREINFO结构的指针lpbmc = (LPBITMAPCOREINFO)lpDIB;/ 灰度映射表BYTE bMap256;/ 计算灰度映射表(保存各个颜色的灰度值),并更新DIB调色板inti,j;for (i = 0; i bmiColorsi.rgbRed +0.587 * lpbmi-bmiColorsi.rgbGreen +0.114 * lpbmi-bmiColorsi.rgbBlue + 0.5);/ 更新DIB调色板红色分量lpbmi-bmiColorsi.rgbRed = i;/ 更新DIB调色板绿色分量lpbmi-bmiColorsi.rgbGreen = i;/ 更新DIB调色板蓝色分量lpbmi-bmiColorsi.rgbBlue = i;/ 更新DIB调色板保留位lpbmi-bmiColorsi.rgbReserved = 0;/ 找到DIB图像象素起始位置lpDIBBits = :FindDIBBits(lpDIB);/ 获取图像宽度lWidth = :DIBWidth(lpDIB);/ 获取图像高度lHeight = :DIBHeight(lpDIB);/ 计算图像每行的字节数lLineBytes = WIDTHBYTES(lWidth * 8);/ 更换每个象素的颜色索引(即按照灰度映射表换成灰度值)/逐行扫描for(i = 0; i lHeight; i+)/逐列扫描for(j = 0; j lWidth; j+)/ 指向DIB第i行,第j个象素的指针lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;/ 变换*lpSrc = bMap*lpSrc;/解除锁定:GlobalUnlock (HGLOBAL)hDIB);变换效果(以下若无特别说明,图示的右边部分都是为某一算法变换之后的效果):二、Walsh变换 算法介绍: 有关Walsh变换的深入介绍,请看此论文:/doc/ucit200510/ucit20051005.pdf程序实现:函数名称:WALSH()参数:double * f- 指向时域值的指针double * F- 指向频域值的指针r2的幂数返回值:无。说明:该函数用来实现快速沃尔什-哈达玛变换。VOID WINAPIWALSH(double *f, double *F, int r)/ 沃尔什-哈达玛变换点数LONGcount;/ 循环变量inti,j,k;/ 中间变量intbfsize,p;double *X1,*X2,*X;/ 计算快速沃尔什变换点数count = 1 r;/ 分配运算所需的数组X1 = new doublecount;X2 = new doublecount;/ 将时域点写入数组X1memcpy(X1, f, sizeof(double) * count);/ 蝶形运算for(k = 0; k r; k+)for(j = 0; j 1k; j+)bfsize = 1 (r-k);for(i = 0; i bfsize / 2; i+)p = j * bfsize;X2i + p = X1i + p + X1i + p + bfsize / 2;X2i + p + bfsize / 2 = X1i + p - X1i + p + bfsize / 2;/ 互换X1和X2X = X1;X1 = X2;X2 = X;/ 调整系数for(j = 0; j count; j+)p = 0;for(i = 0; i r; i+)if (j & (1i)p += 1 (r-i-1);Fj = X1p / count;/ 释放内存delete X1;delete X2;函数名称:DIBWalsh1()参数:LPSTR lpDIBBits - 指向源DIB图像指针LONG lWidth - 源图像宽度(象素数)LONG lHeight - 源图像高度(象素数)返回值:BOOL - 成功返回TRUE,否则返回FALSE。说明:该函数用来对图像进行沃尔什-哈达玛变换。于上面不同的是,此处是将二维矩阵转换成一个列向量,然后对该列向量进行一次一维沃尔什-哈达玛变换。BOOL WINAPIDIBWalsh1(LPSTR lpDIBBits, LONG lWidth, LONG lHeight)/ 指向源图像的指针unsigned char*lpSrc;/ 循环变量LONGi;LONGj;/ 进行付立叶变换的宽度和高度(2的整数次方)LONGw;LONGh;/ 中间变量doubledTemp;intwp;inthp;/ 图像每行的字节数LONGlLineBytes;/ 计算图像每行的字节数lLineBytes = WIDTHBYTES(lWidth * 8);/ 赋初值w = 1;h = 1;wp = 0;hp = 0;/ 计算进行离散余弦变换的宽度和高度(2的整数次方)while(w * 2 = lWidth)w *= 2;wp+;while(h * 2 = lHeight)h *= 2;hp+;/ 分配内存double *f = new doublew * h;double *F = new doublew * h;/ 列for(i = 0; i w; i+)/ 行for(j = 0; j h; j+)/ 指向DIB第j行,第i个象素的指针lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - j) + i;/ 给时域赋值fj + i * w = *(lpSrc);/ 调用快速沃尔什哈达玛变换WALSH(f, F, wp + hp);/ 列for(i = 0; i w; i+)/ 行for(j = 0; j 255)/ 对于超过的,直接设置为255dTemp = 255;/ 指向DIB第j行,第i个象素的指针lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - j) + i;/ 更新源图像* (lpSrc) = (BYTE)(dTemp);/释放内存delete f;delete F;/ 返回return TRUE;变换效果:三、二值化变换算法描述: 二值化是图像分割的一种方法。在二值化图象的时候把大于某个临界灰度值的像素灰度设为灰度極大值,把小于这个值的像素灰度设为灰度極小值,从而实现二值化。 根据阈值选取的不同,二值化的算法分为固定阈值和自适应阈值。 比较常用的二值化方法则有:双峰法、P参数法、迭代法和OTSU法等。程序实现:void CMyDIPView:OnDraw(CDC* pDC)CMyDIPDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if(pDoc-m_hDIB = NULL)return ;/ TODO: add draw code for native data hereint i,j; unsigned char *lpSrc;LPSTR lpDIB = (LPSTR) :GlobalLock(HGLOBAL) pDoc-m_hDIB);int cxDIB = (int) :DIBWidth(lpDIB); / Size of DIB - xint cyDIB = (int) :DIBHeight(lpDIB); / Size of DIB - yLPSTR lpDIBBits=:FindDIBBits (lpDIB);/ 计算图像每行的字节数long lLineBytes = WIDTHBYTES(cxDIB * 8);/ 每行for(i = 0; i cyDIB; i+)/ 每列for(j = 0; j m_hDIB);CRect rect(0,0,cxDIB,cyDIB), rcDIB(0,0,cxDIB,cyDIB);:PaintDIB(pDC-m_hDC, &rect, pDoc-m_hDIB, &rcDIB, pDoc-m_palDIB);void CMyDIPView:OnMenuitem32778()/ TODO: Add your command handler code hereint i,j; unsigned char *lpSrc;CMyDIPDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if(pDoc-m_hDIB = NULL)return ;LPSTR lpDIB = (LPSTR) :GlobalLock(HGLOBAL) pDoc-m_hDIB);LPSTR lpDIBBits=:FindDIBBits (lpDIB);int cxDIB = (int) :DIBWidth(lpDIB); / Size of DIB - xint cyDIB = (int) :DIBHeight(lpDIB); / Size of DIB - ylong lLineBytes = WIDTHBYTES(cxDIB * 8); / 计算图像每行的字节数const float c1=150,c2=2.5;/ 每行for(i = 0; i cyDIB; i+)/ 每列for(j = 0; j cxDIB; j+)/ 指向DIB第i行,第j个象素的指针lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (cyDIB - 1 - i) + j;/ 计算新的灰度值if(*lpSrcm_hDIB); Invalidate(TRUE);变换效果:四、阈值变换算法描述:输入图像像元密度值(灰度、亮度值)按对数函数关系变换为输出图像。程序实现:/参数说明:/LPSTR lpDIBBits:指向源DIB图像指针/LONG lWidth:源图像宽度(象素数)/LONG lHeight:源图像高度(象素数)/BYTE bThre:阈值/程序说明:/该函数用来对图像进行阈值变换。对于灰度值小于阈值的象素直接设置灰度值为0;灰度值大于阈值的象素直接设置为255。BOOL WINAPIThresholdTrans(LPSTR lpDIBBits, LONG lWidth, LONG lHeight, BYTE bThre)/ 指向源图像的指针unsigned char*lpSrc;/ 循环变量LONGi;LONGj;/ 图像每行的字节数LONGlLineBytes;/ 计算图像每行的字节数lLineBytes = WIDTHBYTES(lWidth * 8);/ 每行for(i = 0; i lHeight; i+)/ 每列for(j = 0; j lWidth; j+)/ 指向DIB第i行,第j个象素的指针lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;/ 判断是否小于阈值if (*lpSrc) bThre)/ 直接赋值为0*lpSrc = 0;else/ 直接赋值为255*lpSrc = 255;/ 返回return TRUE;五、傅立叶变换 算法描述: 关于此傅里叶变换算法的具体介绍,请参考本BLOG文章:十、从头到尾彻底理解傅里叶变换算法、上。 程序实现:函数名称:FFT()参数:complex * TD- 指向时域数组的指针complex * FD- 指向频域数组的指针r2的幂数,即迭代次数返回值:无。说明:该函数用来实现快速付立叶变换。VOID WINAPIFFT(complex * TD, complex * FD, int r)/ 付立叶变换点数LONGcount;/ 循环变量inti,j,k;/ 中间变量intbfsize,p;/ 角度doubleangle;complex *W,*X1,*X2,*X;/ 计算付立叶变换点数count = 1 r;/ 分配运算所需存储器W = new complexcount / 2;X1 = new complexcount;X2 = new complexcount;/ 计算加权系数for(i = 0; i count / 2; i+)angle = -i * PI * 2 / count;Wi = complex (cos(angle), sin(angle);/ 将时域点写入X1memcpy(X1, TD, sizeof(complex) * count);/ 采用蝶形算法进行快速付立叶变换for(k = 0; k r; k+)for(j = 0; j 1 k; j+)bfsize = 1 (r-k);for(i = 0; i bfsize / 2; i+)p = j * bfsize;X2i + p = X1i + p + X1i + p + bfsize / 2;X2i + p + bfsize / 2 = (X1i + p - X1i + p + bfsize / 2) * Wi * (1k);X = X1;X1 = X2;X2 = X;/ 重新排序for(j = 0; j count; j+)p = 0;for(i = 0; i r; i+)if (j&(1i)p+=1(r-i-1);FDj=X1p;/ 释放内存delete W;delete X1;delete X2;函数名称:Fourier()参数:LPSTR lpDIBBits - 指向源DIB图像指针LONG lWidth - 源图像宽度(象素数)LONG lHeight - 源图像高度(象素数)返回值:BOOL - 成功返回TRUE,否则返回FALSE。说明:该函数用来对图像进行付立叶变换。BOOL WINAPIFourier(LPSTR lpDIBBits, LONG lWidth, LONG lHeight)/ 指向源图像的指针unsigned char*lpSrc;/ 中间变量doubledTemp;/ 循环变量LONGi;LONGj;/ 进行付立叶变换的宽度和高度(2的整数次方)LONGw;LONGh;intwp;inthp;/ 图像每行的字节数LONGlLineBytes;/ 计算图像每行的字节数lLineBytes = WIDTHBYTES(lWidth * 8);/ 赋初值w = 1;h = 1;wp = 0;hp = 0;/ 计算进行付立叶变换的宽度和高度(2的整数次方)while(w * 2 = lWidth)w *= 2;wp+;while(h * 2 = lHeight)h *= 2;hp+;/ 分配内存complex *TD = new complexw * h;complex *FD = new complexw * h;/ 行for(i = 0; i h; i+)/ 列for(j = 0; j w; j+)/ 指向DIB第i行,第j个象素的指针lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;/ 给时域赋值TDj + w * i = complex(*(lpSrc), 0);for(i = 0; i h; i+)/ 对y方向进行快速付立叶变换FFT(&TDw * i, &FDw * i, wp);/ 保存变换结果for(i = 0; i h; i+)for(j = 0; j w; j+)TDi + h * j = FDj + w * i;for(i = 0; i w; i+)/ 对x方向进行快速付立叶变换FFT(&TDi * h, &FDi * h, hp);/ 行for(i = 0; i h; i+)/ 列for(j = 0; j 255)/ 对于超过的,直接设置为255dTemp = 255;/ 指向DIB第(ih/2 ? i+h/2 : i-h/2)行,第(jw/2 ? j+w/2 : j-w/2)个象素的指针/ 此处不直接取i和j,是为了将变换后的原点移到中心/lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;lpSrc = (unsigned char*)lpDIBBits + lLineBytes *(lHeight - 1 - (ih/2 ? i+h/2 : i-h/2) + (jw/2 ? j+w/2 : j-w/2);/ 更新源图像* (lpSrc) = (BYTE)(dTemp);/ 删除临时变量delete TD;delete FD;/ 返回return TRUE;变换效果: July附注:此傅里叶变换算法,在本BLOG内有深入具体的介绍,请参考本BLOG内其它文章。六、离散余弦变换算法描述: 离散余弦变换(DCT for Discrete Cosine Transform)是与傅里叶变换相关的一种变换,它类似于离散傅里叶变换(DFT for Discrete Fourier Transform),但是只使用实数。 离散余弦变换相当于一个长度大概是它两倍的离散傅里叶变换,这个离散傅里叶变换是对一个实偶函数进行的(因为一个实偶函数的傅里叶变换仍然是一个实偶函数),在有些变形里面需要将输入或者输出的位置移动半个单位(DCT有8种标准类型,其中4种是常见的)。 程序实现:函数名称:FFT()参数:complex * TD- 指向时域数组的指针complex * FD- 指向频域数组的指针r 2的幂数,即迭代次数返回值:无。说明:该函数用来实现快速付立叶变换。VOID WINAPI FFT(complex * TD, complex * FD, int r)/ 付立叶变换点数LONGcount;/ 循环变量inti,j,k;/ 中间变量intbfsize,p;/ 角度doubleangle;complex *W,*X1,*X2,*X;/ 计算付立叶变换点数count = 1 r;/ 分配运算所需存储器W = new complexcount / 2;X1 = new complexcount;X2 = new complexcount;/ 计算加权系数for(i = 0; i count / 2; i+)angle = -i * PI * 2 / count;Wi = complex (cos(angle), sin(angle);/ 将时域点写入X1memcpy(X1, TD, sizeof(complex) * count);/ 采用蝶形算法进行快速付立叶变换for(k = 0; k r; k+)for(j = 0; j 1 k; j+)bfsize = 1 (r-k);for(i = 0; i bfsize / 2; i+)p = j * bfsize;X2i + p = X1i + p + X1i + p + bfsize / 2;X2i + p + bfsize / 2 = (X1i + p - X1i + p + bfsize / 2) * Wi * (1k);X = X1;X1 = X2;X2 = X;/ 重新排序for(j = 0; j count; j+)p = 0;for(i = 0; i r; i+)if (j&(1i)p+=1(r-i-1);FDj=X1p;/ 释放内存delete W;delete X1;delete X2;函数名称:DCT()参数:double * f- 指向时域值的指针double * F- 指向频域值的指针r2的幂数返回值:无。说明:该函数用来实现快速离散余弦变换,利用2N点的快速付立叶变换来实现离散余弦变换。VOID WINAPIDCT(double *f, double *F, int r)/ 离散余弦变换点数LONGcount;/ 循环变量inti;/ 中间变量doubledTemp;complex *X;/ 计算离散余弦变换点数count = 1r;/ 分配内存X = new complexcount*2;/ 赋初值为0memset(X, 0, sizeof(complex) * count * 2);/ 将时域点写入数组Xfor(i=0;icount;i+)Xi = complex (fi, 0);/ 调用快速付立叶变换FFT(X,X,r+1);/ 调整系数dTemp = 1/sqrt(count);/ 求F0F0 = X0.real() * dTemp;dTemp *= sqrt(2);/ 求Fufor(i = 1; i count; i+)Fi=(Xi.real() * cos(i*PI/(count*2) + Xi.imag() * sin(i*PI/(count*2) * dTemp;/ 释放内存delete X;函数名称:DIBDct()参数:LPSTR lpDIBBits - 指向源DIB图像指针LONG lWidth - 源图像宽度(象素数)LONG lHeight - 源图像高度(象素数)返回值:BOOL - 成功返回TRUE,否则返回FALSE。说明:该函数用来对图像进行离散余弦变换。BOOL WINAPI DIBDct(LPSTR lpDIBBits, LONG lWidth, LONG lHeight)/ 指向源图像的指针unsigned char*lpSrc;/ 循环变量LONGi;LONGj;/ 进行付立叶变换的宽度和高度(2的整数次方)LONGw;LONGh;/ 中间变量doubledTemp;intwp;inthp;/ 图像每行的字节数LONGlLineBytes;/ 计算图像每行的字节数lLineBytes = WIDTHBYTES(lWidth * 8);/ 赋初值w = 1;h = 1;wp = 0;hp = 0;/ 计算进行离散余弦变换的宽度和高度(2的整数次方)while(w * 2 = lWidth)w *= 2;wp+;while(h * 2 = lHeight)h *= 2;hp+;/ 分配内存double *f = new doublew * h;double *F = new doublew * h;/ 行for(i = 0; i h; i+)/ 列for(j = 0; j w; j+)/ 指向DIB第i行,第j个象素的指针lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;/ 给时域赋值fj + i * w = *(lpSrc);for(i = 0; i h; i+)/ 对y方向进行离散余弦变换DCT(&fw * i, &Fw * i, wp);/ 保存计算结果for(i = 0; i h; i+)for(j = 0; j w; j+)fj * h + i = Fj + w * i;for(j = 0; j w; j+)/ 对x方向进行离散余弦变换DCT(&fj * h, &Fj * h, hp);/ 行for(i = 0; i h; i+)/ 列for(j = 0; j 255)/ 对于超过的,直接设置为255dTemp = 255;/ 指向DIB第y行,第x个象素的指针lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;/ 更新源图像* (lpSrc) = (BYTE)(dTemp);/ 释放内存delete f;delete F;/ 返回return TRUE; 变化效果:更多见下一章:数字图像处理领域的二十四个典型算法及vc实现、第二章。本文完。数字图像处理领域的二十四个典型算法及vc实现、第二章作者:July 二零一一年二月二十六日。参考:百度百科、维基百科、vc数字图像处理。-数字图像处理领域的二十四个典型算法及vc实现、第一章一、256色转灰度图二、Walsh变换三、二值化变换四、阈值变换五、傅立叶变换六、离散余弦变换数字图像处理领域的二十四个典型算法及vc实现、第二章七、高斯平滑八、图像平移九、图像缩放十、图像旋转数字图像处理领域的二十四个典型算法及vc实现、第三章数字图像处理领域的二十四个典型算法及vc实现、第四章前期回顾: 在上一章,数字图像处理领域的二十四个典型算法及vc实现、第一章中,我们介绍和实现了256色转灰度图、Walsh变换、二值化变换、阈值变换、傅立叶变换、离散余弦变换等数字图像处理领域中的6个典型算法。这一篇接上一篇,继续阐述数字图像处理领域的典型算法。 注,有兴趣具体深入研究的朋友可参考国内外有关此类图像处理算法的优秀论文。七、高斯平滑算法描述: 在图像预处理中,对图像进行平滑,去除噪声,恢复原始图像是一个重要内容。本文设计了一个平滑尺度和模板大小均可以改变的高斯滤波器,用它对多幅加入各种噪声后的图像进行平滑,经过对各个结果图像的对比可知高斯滤波对服从正态分布的噪声去除效果比较好,并且相比各个不同参数,在平滑尺度为2,模板大小为7时效果最佳。程序实现:函数名称:Template:参数:HDIB hDIB 图像的句柄double *tem 指向模板的指针int tem_w 模板的宽度int tem_h 模板的高度double xishu 模板的系数功能:对图像进行模板操作说明:为处理方便起见,模板的宽度和高度都应为奇数HDIB Template(HDIB hDIB,double * tem ,int tem_w,int tem_h,double xishu) /统计中间值 double sum; /指向图像起始位置的指针 BYTE *lpDIB=(BYTE*):GlobalLock(HGLOBAL) hDIB);/指向象素起始位置的指针BYTE *pScrBuff =(BYTE*):FindDIBBits(char*)lpDIB);/获取图像的颜色信息 int numColors=(int) :DIBNumColors(char *)lpDIB); /如果图像不是256色返回 if (numColors!=256) /解除锁定 :GlobalUnlock(HGLOBAL) hDIB);/返回return(hDIB); /将指向图像象素起始位置的指针,赋值给指针变量 BYTE* oldbuf = pScrBuff; /循环变量 int i,j,m,n;int w, h, dw;/获取图像的宽度w = (int) :DIBWidth(char *)lpDIB);/获取图像的高度h = (int) :DIBHeight(char *)lpDIB);/计算图像每行的字节数dw = (w+3)/4*4;/建立一个和原图像大小相同的25色灰度位图 HDIB newhDIB=NewDIB(w,h,8);/指向新的位图的指针BYTE *newlpDIB=(BYTE*):GlobalLock(HGLOBAL) newhDIB);/指向新的位图的象素起始位置的指针 BYTE *destBuf = (BYTE*)FindDIBBits(char *)newlpDIB); /将指向新图像象素起始位置的指针,赋值给指针变量 BYTE *newbuf=destBuf;/对图像进行扫描/行 for(i=0;ih;i+) /列 for(j=0;jw;j+) /为统计变量赋初始值 sum=0; /对于图像的4个边框的象素保持原灰度不变 if( j(w-(tem_w+1)/2) | i(h-(tem_h+1)/2) ) *(newbuf+i*dw+j)=*(oldbuf+i*dw+j); /对于其他的象素进行模板操作 else /将点(i,j)点作为模板的中心 for(m=i-(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 代销协议合同样本
- 保安销售卖房合同样本
- 4050解除合同样本
- led路灯购销合同样本
- 供货木门合同标准文本
- 产品定制开发合同标准文本
- 借车协议过户合同样本
- 中标后合同范例 测绘
- 住建局二手房网签合同样本
- 公务员省考时事政策解读试题及答案
- 工业互联网平台的商业模式与盈利策略
- 2024年09月2024渤海银行上海分行校园招聘笔试历年参考题库附带答案详解
- 2025年辽宁省辽渔集团招聘笔试参考题库含答案解析
- 《员工招聘与选拔》课件
- 南昌起义模板
- 【MOOC】体育舞蹈与文化-大连理工大学 中国大学慕课MOOC答案
- 接处警流程培训
- 2024年商丘职业技术学院单招职业技能测试题库附答案
- 《园林植物病虫害》课件
- 空调维保服务投标方案 (技术方案)
- 医用气体安装工程作业安全技术交底
评论
0/150
提交评论