背景起伏

背景起伏

背景起伏提出了單位根假設檢驗可見光圖像背景起伏平穩性的方法,理論上證明了時空域變化的廣義平穩性。該方法採用ADF假設檢驗,從時域和空域分析背景灰度的變化,利用線性回歸的方法進行協整性檢驗,從而得出結論。

基本介紹

  • 中文名:背景起伏
  • 外文名:background fluctuation    
  • 學科:圖像處理
簡介,去除方法,舉例,javascript實現起伏的水波背景效果,

簡介

在平穩的基礎上,使用相關長度刻劃背景起伏的時空域相關性,得到兩個結論。
(1)一維指數模型的時間相關長度分析表明背景起伏具有強時相關性。並且這種強相關性集中體現於像素點灰度均值和相鄰的有限(1~2幀)。因此提出低階AR模型(1~2階)對這種特性進行描述,得到的模型參數可用於圖像背景估計。
(2)空間相關長度分析證實了背景起伏具有強的空域相關性。並且圖像可以分割成若干個不相關的區域。總的來說,背景起伏具有時空域的雙重平穩性和強相關性。

去除方法

(1):設定峰值閾值,背景的峰值顯然比目標峰值小的得,再根據需要確定自己的抑制程度;不過這種做法結果會使目標區域的低峰值也被抑制
(2):利用水平,垂直投影等方法確定目標峰值的區域,將非目標區域進行抑制;
(3):將圖像整體除以最大峰值,小的背景峰值會變得很微小;

舉例

1、從目標區域外提取一列數據用於建構一幅背景圖。因為背景起伏是周期性的,而且分布很簡單。
2、儘可能將目標區域的範圍提取出來,然後減去構建的背景圖。這樣就可以保住目標,同時能很好地把背景起伏去掉。
具體的做法很簡單:
一、從原圖的矩陣中提出一列能反映背景的數據
二、創建一個與原圖大小一樣的矩陣
三、新矩陣的每一行的數據都是一樣的,具體是什麼由從原圖提取出來的那一列數據決定然後把主要的特徵區域的值置為0,基本就可以得到上面的背景估計了。該方法通用性不是很強,但對於這個例子來說,效果很好。

javascript實現起伏的水波背景效果

<!DOCTYPE html>
<html>
<head>
<title>水波背景</title>
<meta charset="gb2312" />
<style>
html, body {width:100%; height:100%; padding:0; margin:0;}
</style>
</head>
<body>
<canvas id="canvas" style="position:absolute;top:0px;left:0px;z-index:1;"></canvas>
<script type="text/javascript">
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
canvas.width = canvas.parentNode.offsetWidth;
canvas.height = canvas.parentNode.offsetHeight;
//如果瀏覽器支持requestAnimFrame則使用requestAnimFrame否則使用setTimeout
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
function( callback ){
window.setTimeout(callback, 1000 / 60);
};
})();
// 波浪大小
var boHeight = canvas.height / 10;
var posHeight = canvas.height / 1.2;
//初始角度為0
var step = 0;
//定義三條不同波浪的顏色
var lines = ["rgba(0,222,255, 0.2)",
"rgba(157,192,249, 0.2)",
"rgba(0,168,255, 0.2)"];
function loop(){
ctx.clearRect(0,0,canvas.width,canvas.height);
step++;
//畫3個不同顏色的矩形
for(var j = lines.length - 1; j >= 0; j--) {
ctx.fillStyle = lines[j];
//每個矩形的角度都不同,每個之間相差45度
var angle = (step+j*50)*Math.PI/180;
var deltaHeight = Math.sin(angle) * boHeight;
var deltaHeightRight = Math.cos(angle) * boHeight;
ctx.beginPath();
ctx.moveTo(0, posHeight+deltaHeight);
ctx.bezierCurveTo(canvas.width/2, posHeight+deltaHeight-boHeight, canvas.width / 2, posHeight+deltaHeightRight-boHeight, canvas.width, posHeight+deltaHeightRight);
ctx.lineTo(canvas.width, canvas.height);
ctx.lineTo(0, canvas.height);
ctx.lineTo(0, posHeight+deltaHeight);
ctx.closePath();
ctx.fill();
}
requestAnimFrame(loop);
}
loop();
</script>
</body>
</html>

相關詞條

熱門詞條

聯絡我們