1. 程式人生 > >OpenCL應用與雙線性插值

OpenCL應用與雙線性插值

void func(BYTE*src, int width, int height, int pitchSrc, BYTE *dst, int t_width, int t_height, int pitchDes)
{
       float fw = float(width)/ (t_width);
       float fh = float(height)/ (t_height);
       float x0, y0;
       int y1, y2, x1, x2, x, y;
       float fx1, fx2, fy1, fy2;
       float s1,s2,s3,s4;
       BYTEtemp,p11,p12,p21,p22;
       BYTE *p1=dst;
 
       for(y=0; y<t_height; y++)
       {
              y0 =y*fh;
              y1 = int(y0);
              if(y1 == height-1)   y2 = y1;
              else y2 = y1 + 1;
              fy1 =y1-y0;
              fy2 =1.0f - fy1;
              for(x=0; x<t_width; x++)
              {
                     x0= x*fw;
                     x1= int(x0);
                     if(x1 == width-1)   x2 = x1;
                     else x2 = x1+1;
                     fx1= x1-x0;
                     fx2= 1.0f - fx1;
 		     s1 = fx2*fy2;
                     s2= fx1*fy2;
                     s3= fx1*fy1;
                     s4= fx2*fy1;
 
                     p11= *(src + pitchSrc*y1 + x1);
                     p12= *(src + pitchSrc*y1 + x2);
                     p21= *(src + pitchSrc*y2 + x1);
                     p22= *(src + pitchSrc*y2 + x2);
 
                     temp=(BYTE)(p22*s3) + (BYTE)(p21*s4) + (BYTE)(p12*s2) + (BYTE)(p11*s1);
                     *p1=temp;
                     *(++p1)=temp;
                     *(++p1)=temp;
                     p1++;
              }
              p1 =dst + y*pitchDes;
       }
}

相關推薦

OpenCL應用線性

void func(BYTE*src, int width, int height, int pitchSrc, BYTE *dst, int t_width, int t_height, int pitchDes) { float fw = float(width)/ (t_width);

最近鄰內線性

前一陣想改進個影象處理的演算法,發現基礎太差了,還是要從基礎開始,畢竟一口出不成胖子 於是自己學習一下影象處理的基本知識。看到兩個最簡單的演算法 一個是最近鄰內插值和雙線性插值,決定自己實現以下,順便也能瞭解一下數字影象內部的儲存結構。 以下為簡單整理 by the way

影象-線性三次

在現實生活中,我們經常會遇到把影象進行放大、幾何空間變換的情況等等,這些操作都需要在源影象和目標影象之間建立一個對映規則,使得兩影象畫素座標之間建立起一種對應關係,從而為目標影象的每一個畫素賦值。 從源影象到目標影象的對映叫前向對映,但是這種對映方法可能會出現這樣的兩個問題

影象的放大縮小(2)——線性放大均值縮小

概述 基於上一節“等距取樣法”實現圖片放大與縮小的缺點。要對其進行改進,對影象的縮小則可以用“區域性均值法”,對於影象的放大則可以用“雙線性插值法”。 效果如下:                           2048*1536縮小為10

線性的影象縮放演算法的研究實現

Opencv學堂 http://mp.weixin.qq.com/s?__biz=MzA4MDExMDEyMw==&mid=100000109&idx=1&sn=7540b49e869c3e27f87c84f6f3dfe9a8&chksm

幾何角度理解線性線性

表示 兩種 容易 灰度 圖片 技術分享 方塊 描述 浮點 已知兩個點的坐標為\((x0,y0)\)和\((x1,y1)\),他們呈簡單的線性關系(或者近似)。帶求坐標x落在\((x0,x1)\)之間,求y。 如上圖白色的線。 從幾何角度有兩種方法,一是相似三角形,二是斜率

圖像縮放——線性算法

val 位置 單位 sso 數學 圖像 取值 利用 等待   在數學上,雙線性插值是有兩個變量的插值函數的線性插值擴展,其核心思想是在兩個方向分別進行一次線性插值。如果選擇一個坐標系統使得 的四個已知點坐標分別為 (0, 0)、(0, 1)、(1, 0) 和 (1, 1)

影象演算法的基礎知識(線性,協方差矩陣,矩陣的特徵值、特徵向量)

0. 前言 MATLAB或者OpenCV裡有很多封裝好的函式,我們可以使用一行程式碼直接呼叫並得到處理結果。然而當問到具體是怎麼實現的時候,卻總是一臉懵逼,答不上來。前兩天參加一個演算法工程師的筆試題,其中就考到了這幾點,感到非常汗顏!趕緊補習! 1. 雙線性插值 在影象處

線性的影象縮放問題

       初次開始寫部落格,想記錄下自己在公司實習所做過的事情以及學習到的東西,雖然還是有很多東西不瞭解也還沒做出來,但是也希望這是一種體驗。        我於2018.9.3入職進行實習,到現在也快過去兩個月了,我在公司

最近鄰線性的基本原理 以及OpenCV中resize函式的用法改變影象的大小

最近鄰插值和雙線性插值的基本原理 影象的縮放很好理解,就是影象的放大和縮小。傳統的繪畫工具中,有一種叫做“放大尺”的繪畫工具,畫家常用它來放大圖畫。當然,在計算機上,我們不再需要用放大尺去放大或縮小影象了,把這個工作交給程式來完成就可以了。下面就來講講計算機怎麼來放大縮小圖象;在本文中,

線性線性Bilinear Interpolation演算法

線性插值 先講一下線性插值:已知資料 (x0, y0) 與 (x1, y1),要計算 [x0, x1] 區間內某一位置 x 在直線上的y值(反過來也是一樣,略): y−y0x−x0=y1−y0x1−x0y−y0

OpenCV---如何對影象進行線性運算(7)

附程式碼如下: import cv2 as cv import numpy as np def resize(): src = cv.imread("D:/matplotlib/0.jpg") cv.imshow("input",src) h, w = src.shape

影象演算法-最近鄰 線性

影象插值演算法包括向上插值和向下插值,向上插值就是對影象進行放大,向下插值就是對影象進行縮小,插值演算法在影象預處理過程中經常被使用,通過插值演算法,可以將影象尺寸變換為任意尺寸,下面以舉例子的方式來說明兩種常見的插值演算法: 假設影象原始尺寸為wi,hi,縮

影象演算法(一):最近鄰線性,三次

最近在複習影象演算法,對於一些簡單的影象演算法進行一個程式碼實現,由於找工作比較忙,具體原理後期補上,先上程式碼。今天先給出最近鄰插值,雙線性插值,三次插值。 1.最近鄰插值 原始圖中影響點數為1 (1)程式碼 # include<iostream>

圖片的線性

將目標影象的座標對映到原始影象上,若得到的座標不是整數,需要進行插值。 比如,對映後的座標為(15.2,22.3),根據雙線性插值怎麼確定對映後的畫素值呢? 首先進行水平和豎直方向的對映,分別得到A

線性的理解

在數學上,雙線性插值是有兩個變數的插值函式的線性插值擴充套件,其核心思想是在兩個方向分別進行一次線性插值。如果選擇一個座標系統使得 的四個已知點座標分別為 (0, 0)、(0, 1)、(1, 0) 和 (1, 1),那麼插值公式就可以化簡為: 用矩陣運算來表示的話就是:

線性Code

http://blog.csdn.net/carson2005/article/details/50460088 void ImgResize_BiLinear()   {   &nb

影象縮放——線性演算法

在數學上,雙線性插值是有兩個變數的插值函式的線性插值擴充套件,其核心思想是在兩個方向分別進行一次線性插值。如果選擇一個座標系統使得  的四個已知點座標分別為 (0, 0)、(0, 1)、(1, 0) 和 (1, 1),那麼插值公式就可以化簡為: 用矩陣運算來表示的話就

線性 - c#實現

1.雙線性插值  線性插值是遊戲Unity開發過程中非常常用的演算法,在Unity中直接使用 lerp函式就可以實現。但對於雙線性插值,Unity並沒有給出可以直接使用了API,下面會給出一個利用C#對二維陣列進行雙線性插值的演算法。 下圖是雙線性插值的示意圖(圖片取自維

影象放縮中最近鄰線性的基本原理

影象的縮放很好理解,就是影象的放大和縮小。傳統的繪畫工具中,有一種叫做“放大尺”的繪畫工具,畫家常用它來放大圖畫。當然,在計算機上,我們不再需要用放大尺去放大或縮小影象了,把這個工作交給程式來完成就可以了。下面就來講講計算機怎麼來放大縮小圖象;在本文中,我們所說的影象都是指