程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> VB圖像處理之鉛筆畫算法和木雕算法

VB圖像處理之鉛筆畫算法和木雕算法

編輯:VB綜合教程
在這一篇中我將和大家講述鉛筆畫算法和木雕算法和它們的實現。為什麼我要把這兩個算法放在一起說呢,因為這兩個算法是非常相似的。首先要說一下人的眼睛對於圖像的觀察,人的眼睛對於灰度(亮度)的敏感要遠遠大於對色彩的敏感,而人的眼睛對於暖色調和冷色調的敏感有要遠大於對一般色彩的敏感度。
  
  經過大量的測試,人們得到了一個經驗公式,來說明人的眼睛是如何識別亮度的:
  
  Gray=Red*0.3 Green*0.6 Blue*0.1
  
  而右因為人的眼睛對於綠色的敏感度最大,就有了一個更加近似的公式:
  
  Gray=Green
  
  請大家再回想一下以前在用鉛筆畫眼睛看到的景色的時候,是如何做的呢?輪廓,對了,輪廓是什麼呢?其實說白了就是灰度的一個跳變。因此我們只要設定一個閥值,把電腦上的圖片中的像素的色彩轉化為灰度,再把相鄰的兩個像素的灰度去比較,當灰度變化超過一定的量的時候,我們就判斷它是輪廓。用鉛筆把它描繪出來。
  
  有了這個思路,我們就很容易把這個算法寫出來了。
  
  ->PublicSubPencil(OptionalByValSensitivityAsLong=25)
   DimIAsLong
   DimLAsLong
   DimMAsLong
   DimNAsLong
   DimColAsLong
   DimColNextAsLong
   'OnErrorGoToErrLine
   IfNotCanPutThenExitSub
   Done=False
   TimeFilter=timeGetTime
   ForI=0ToOutPutWid-1
  M=I 1
  ForL=0ToOutPutHei-1
   N=L 1
   Col=ColOut(0,I,L)*3 ColOut(1,I,L)*6 ColOut(2,I,L)
   Col=Col10'當前點的灰度哦。
   ColNext=ColOut(0,M,N)*3 ColOut(1,M,N)*6 ColOut(2,M,N)
   ColNext=-ColNext/10'下一點的灰度哦。
   IfCol ColNext>SensitivityThen'判斷灰度變化是否超過設定的閥值
  ColOut(0,I,L)=0'RGB(0,0,0)表示黑色
  ColOut(1,I,L)=0
  ColOut(2,I,L)=0
   Else
  ColOut(0,I,L)=255'RGB(255,255,255)表示白色
  ColOut(1,I,L)=255
  ColOut(2,I,L)=255
   EndIf
  Next
   Next
   Done=True
   TimeFilter=timeGetTime-TimeFilter
   ExitSub
  ErrLine:
   MsgBoxErr.Description
  EndSub->
  這裡用到的所有全局變量都已經在前幾章中用到,就不再重復說明了。
  
  原圖:
  
  ->->
  鉛筆畫效果:
  
  ->->
  說到這裡,那麼木雕的原理就更簡單啦,無非就是判斷該點像素的灰度,如果灰度大於給定的閥值,就設它為白色,如果該點像素的灰度小於給定的閥值,就設定它為黑色。
  
  那麼,這個算法,我就不寫出來了,讓給電腦前的讀者,自己寫一個試試看吧,不會難道你的。
  
  原圖:
  
  ->->
  木雕效果:
  
  ->->
  這兩篇講的都是一些很簡單的圖像處理,下一篇講給大家講“灰度直方圖”的概念,大家或許用過PhotoShop中的AutoLevel的功能吧,它可以把一張色彩很“別扭”的圖像轉換為很“舒服”的效果,那麼就需要用到“灰度直方圖”這個工具了,希望大家不要錯過。->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved