数字图像处理课件第3章彩色图像处理
第三章 彩色图像处理,3.1 24位彩色图像的读取与显示 3.2 彩色图像的特效处理 3.3 彩色图像的界面切换技术 3.4 彩色图像的动画技术,程序设计,打开文件: Open 文件名 For Binary As #文件号,读取文件: Get #文件号, 起始字节, 变量名,关闭文件: Close #文件号,3.1 24位彩色图像的读取与显示,Open CDlg1.FileName For Binary As #1 Get #1, 19, w: Get #1, 23, h: Seek #1, 55 For j = h-1 To 0 step -1 For i = 0 To w - 1 For k = 2 To 0 Get #1, , pic(i, j, k) Next k Next i If w * 3 mod 4 0 Then For k = 1 To 4 - (w * 3) Mod 4) Get #1, , pix Next k End If Next j Close #1,3.1 24位彩色图像的读取与显示,3.2 彩色图像的特效处理,对一幅彩色图像的各像素值的R、G、B分量 按一定的算法进行变换,并将变换后的新图像值 重新显示出来,则可实现不同效果图像的显示。,对每个像素的R、B、G三分量分别求逆,即用 255分别减去当前像素的R、G、B三个分量值,将 得到的新值作为图像处理后的值: g(i,j)=255-f(i,j),3.2.1 逆反处理,For j = 0 To h - 1 For i= 0 To w - 1 r = 255 pic(i,j,0) g = 255 pic(i,j,1) b = 255 pic(i,j,2) P.PSet (i,j), RGB(r, g, b) Next i Next j,3.2.1 逆反处理,3.2.2 平滑处理,将源图中的每个像素都由其相邻N×N(如3×3)个像 素的平均值来代替。设源图像素的某一颜色分量值为 f(i ,j),平均处理后该像素的某一颜色分量值为g(i,j)。 g (i ,j)=(f(i -1,j-1)+ f(i ,j-1)+ f(i +1,j-1) + f(i -1,j)+ f(i ,j)+ f(i +1,j) + f(i -1,j+1)+ f(i ,j+1)+ f(i +1,j+1)/9,n = Val(Text1.Text): n1 = n * n: n2 = n 2 For j = n2 To h 1-n2 For i = n2 To w 1-n2 rr = 0: gg = 0: bb = 0 For k1 = -n2 To n2 For k2 = -n2 To n2 rr = rr + pic(i + k1, j + k2, 0) gg = gg + pic(i + k1, j + k2, 1) bb = bb +pic(i + k1, j + k2, 2) Next k2 Next k1 rr = rr n1: gg = gg n1: bb = bb n1 Picture2.PSet (i, j), RGB(rr, gg, bb) Next i Next j,3.2.2 平滑处理,3.2.3 霓红处理,计算源图像素f(i ,j)的三个分量与相邻像素f(i +1,j)、f(i ,j+1)的三个分量的梯度(差的平方之和的平方根),然后将梯度值作为处理后像素g(i ,j) 的三个分量值。,For j = 0 To h - 1 For i = 0 To w - 1 r = sqr(pic(i,j,0) - pic(i+1,j,0) 2 +(pic(i,j,0) - pic(i,j+1,0) 2) g = sqr(pic(i,j,1) - pic(i+1,j,1) 2 +(pic(i,j,1) - pic(i,j+1,1) 2) b = sqr(pic(i,j,2) - pic(i+1,j,2) 2 +(pic(i,j,2) - pic(i,j+1,2) 2) Picture2.PSet (i, j), RGB(r, g, b) Next i Next j,3.2.3 霓红处理,3.2.4 边缘锐化,源图像素f(i ,j)三分量值与相邻像素f(i -1,j-1)的三分量值按下式计算得处理后像素g (i ,j) 的三分量值。(式中k可根据图像具体内容确定)。,3.2.4 边缘锐化,For j = 1 To h - 1 For i= 1 To w - 1 r = pic(i,j,0) - Abs(pic(i,j,0) - pic(i-1,j-1,0) g = pic(i,j,1) - Abs(pic(i,j,1) - pic(i-1,j-1,1) b = pic(i,j,2) - Abs(pic(i,j,2) - pic(i-1,j-1,2) Picture1.PSet (i, j), RGB(r, g, b) Next i Next j,3.2.5 浮雕处理,计算源图像素f(i ,j)三分量值与相邻像素f(i-1,j)三分量值之差后加上一个常数,然后将该三分量值作为处理后像素g(i,j)的值。,For j = 0 To h - 1 For i= 1 To w - 1 r = pic(i,j,0) - pic(i-1,j,0)+128 g = pic(i,j,1) - pic(i-1,j,1)+128 b = pic(i,j,2) - pic(i-1,j,2)+128 Picture1.PSet (i, j), RGB(r, g, b) Next i Next j,3.2.5 浮雕处理,3.2.6 镶嵌处理,处理后图像每一小区域内的所有像素都取此区域内源图 像各像素值之和的平均值。 g(i ,j)=(f(i-1,j-1)+ f(i ,j-1)+ f(i+1,j-1) + f(i-1,j) + f(i ,j) + f(i+1,j) + f(i-1,j+1)+ f(i ,j+1)+ f(i+1,j+1)/9,g(i-1,j-1) g(i ,j-1) g(i+1,j-1) g(i-1,j) g(i ,j) g(i+1,j) g(i-1,j+1) g(i ,j+1) g(i+1,j+1),g(i ,j),n = Val(Text1.Text): n1 = n * n: n2 = n 2 For j = n2 To h n2-1 Step n For i = n2 To w n2-1 Step n r = 0: g = 0: b = 0 For k1 = -n2 To n2 For k2 = -n2 To n2 r = r + pic(i+k1,j+k2,0) g = g + pic(i-k1,j+k2,1) b = b + pic(i+k1,j+k2,2) Next k2 Next k1 r= r n1: g = g n1: b = b n1 For k1 = -n2 To n2 For k2 = -n2 To n2 Picture1.PSet (i + k1, j + k2), RGB(r, g, b) Next k2 Next k1 Next i Next j,3.2.6 镶嵌处理,3.2.7 曝光处理,逆转小于128的基本颜色。 如:(58,199,130)=(197,199,130) R128: RR=255-R G128: GG=255-G B128: BB=255-B,For j = 0 To h - 1 For i = 0 To w - 1 r = pic(i,j,0): g = pic(i,j,1): b = pic(i,j,2) If r 128 Then r = 255 - r If g 128 Then g = 255 - g If b 128 Then b = 255 - b Picture8.PSet (i, j), RGB(r, g, b) Next i Next j,3.2.7 曝光处理,3.2.8 扩散处理,从当前N×N相邻的像素中随意选取一个值作为区域中心像素的值。,n = Val(Text1.Text) n1 = n * n n2 = n 2 For j = n2 To h - n2 - 1 For i = n2 To w - n2 - 1 xx = Rnd() * (n - 1) - n2 yy = Rnd() * (n - 1) - n2 r = pic(i + xx, j + yy, 0) g = pic(i + xx, j + yy, 1) b = pic(i + xx, j + yy, 2) Picture1.PSet (i, j), RGB(r, g, b) Next i Next j,3.3 彩色图像的界面切换技术,3.3.1 图像从上下进入对接进入界面,For j = 0 To h / 2 For i = 0 To w - 1 P.PSet (i, j), RGB(pic(i, j, 0), pic(i, j, 1), pic(i, j, 2) P.PSet (i,h-j-1),RGB(pic(i,h-j-1,0),pic(i,h-j-1,1),pic(i,h-j-1,2) Next i Next j,3.3.1 图像从上下对接进入界面,3.3.2 图像从左上到右下逐渐进入界面,If w h Then n = w Else n = h End If For k = 1 To n - 1 For j = 0 To k If j w And k h Then P.PSet (j, k), RGB(pic(j, k, 0), pic(j, k, 1), pic(j, k, 2) If j h And k w Then P.PSet (k, j), RGB(pic(k, j, 0), pic(k, j, 1), pic(k, j, 2) Next j Next k,3.3.2 图像从左上到右下逐渐进入界面,3.3.3 图像从中央向四周扩展进入界面,3.3.3 图像从中央向四周扩展进入界面,xmid = Int(w / 2): ymid = Int(h / 2) Max = Int(IIf(h w, w, h) / 2) P.PSet (xmid, ymid), RGB(pic(xmid, ymid, 0), pic(xmid, ymid, 1), pic(xmid, ymid, 2) For k = 1 To Min For i = xmid - k To xmid + k '显示四周的水平像素 P.PSet (i, ymid - k), RGB(pic(i, ymid - k, 0), pic(i, ymid - k, 1), pic(i, ymid - k, 2) P.PSet (i, ymid + k), RGB(pic(i, ymid + k, 0), pic(i, ymid + k, 1), pic(i, ymid + k, 2) Next i For j = ymid - k To ymid + k '显示四周的垂直像素 P.PSet (xmid - k, j), RGB(pic(xmid - k, j, 0), pic(xmid - k, j, 1), pic(xmid - k, j, 2) P.PSet (xmid + k, j), RGB(pic(xmid + k, j, 0), pic(xmid + k, j, 1), pic(xmid + k, j, 2) Next j Next k,If h w Then '显示非正方形图像的多余高度的