灰度重采样的方法分为_数字图像灰度重采样

图像重采样的依据是辛克(SINC)函数。但由于辛克函数是定义在无穷域上的,又包括三角函数的计算,实际使用不方便,因此人们采用了一些近似函数代替它,据此产生了三种常用的重采样方法:最邻近像元采样法、双线性内插法和双三次卷积重采样法。

①最邻近像元采样法

该法的实质是取距离被采样点最近的已知像素元素的灰度作为采样灰度。

bc8abf5c8471571ae269761c8a0564cd.png

最邻近像元采样法最简单,辐射保真度较好,但它将造成像点在一个像素范围内的位移,其几何精度较其他两种方法差。

最邻近像元采样法函数如下:

% 最邻近插值function [Img_0] = NearestPixelSampling(Img,Scale)[r,c,l] = size(Img);r0 = floor(r*Scale);c0 = floor(c*Scale);Img_0 = uint8(zeros(r0,c0,l));for i = 1:1:r0    for j = 1:1:c0        ii = round(i/Scale);        jj = round(j/Scale);        if ii < 1            ii = 1;        end        if ii > r            ii = r;        end        if jj < 1            jj = 1;        end        if jj > c            jj = c;        end        Img_0(i,j,:) = Img(ii,jj,:);    endend

同一张原始影像采用不同的缩放比例,重采样结果如下图所示:



1d62b7cc1f0d5c1ecb5f881fde367942.png




②双线性内插法

该法的重采样函数是对辛克函数的更粗略近似,其线性函数表达形式为:

7d6da6c5863f7dcbcc135ea8be6e5815.png

该算法较为简单,具有一定的采样精度,是实践中常用的方法,但图像略变模糊。

% 双线性插值function [Img_0] = BilinearPixelSampling(Img,Scale)% 获取原始图像的尺寸[r,c,l] = size(Img);% 计算新图像的尺寸r0 = floor(r*Scale);c0 = floor(c*Scale);% 创建一张新的空白图像Img_0 = uint8(zeros(r0,c0,l));for i = 2:1:r0    for j = 1:1:c0        ii = (i-0.5)/Scale;        jj = (j-0.5)/Scale;                i0 = floor(ii - 0.5)+1 ;i1 = floor(ii + 0.5)+1 ;        j0 = floor(jj - 0.5)+1 ;j1 = floor(jj + 0.5)+1 ;                if i0 >= 1 && i0 <= r && i1 >= 1 && i1 <= r && j0 >= 1 && j0 <= c && j1 >= 1 && j1 <= c            Wx(1,1) = mod(ii,1);Wx(1,2) = 1 - mod(ii,1);            I(1,1,:) = double(Img(i0,j0,:));            I(1,2,:) = double(Img(i0,j1,:));            I(2,1,:) = double(Img(i1,j0,:));            I(2,2,:) = double(Img(i1,j1,:));            Wy(1,1) = mod(jj,1);Wy(2,1) = 1 - mod(jj,1);            Img_0(i,j,1) = Wx*I(:,:,1)*Wy;            Img_0(i,j,2) = Wx*I(:,:,2)*Wy;            Img_0(i,j,3) = Wx*I(:,:,3)*Wy;        end    endend

同一张原始影像采用不同的缩放比例,重采样结果如下图所示:

c5d130d2833a6ea26328db0a1968fd99.png


③双三次卷积重采样法

该方法用一个三次重采样函数来近似表示辛克函数:

f602e270b98c7901e53307467d59aa6b.png

双三次卷积的内插精度较高,但计算量大。

% 双三次卷积插值function [Img_0] = CubicDoubleConvolutionPixelSampling(Img,Scale)% 获取原始图像的尺寸[r,c,l] = size(Img);% 计算新图像的尺寸r0 = floor(r*Scale);c0 = floor(c*Scale);% 创建一张新的空白图像Img_0 = uint8(zeros(r0,c0,l));for i = 1:1:r0    for j = 1:1:c0        ii = (i-0.5)/Scale;        jj = (j-0.5)/Scale;                iTab = [floor(ii - 0.5),floor(ii - 0.5)+1,floor(ii + 0.5)+1,floor(ii + 0.5)+2];        jTab = [floor(jj - 0.5),floor(jj - 0.5)+1,floor(jj + 0.5)+1,floor(jj + 0.5)+2];                a1 = min(iTab);        a2 = max(iTab);        a3 = min(jTab);        a4 = max(jTab);                if min(iTab) > 0 && min(jTab) > 0 && max(iTab) <= r && max(jTab) <= c            dx = mod(ii,1);dy = mod(jj,1);            Wx = [-dx + 2*dx*dx - dx*dx*dx,1 - 2*dx*dx + dx*dx*dx,dx + dx*dx - dx*dx*dx,-dx*dx + dx*dx*dx];            Wy = [-dy + 2*dy*dy - dy*dy*dy;1 - 2*dy*dy + dy*dy*dy;dy + dy*dy - dy*dy*dy;-dy*dy + dy*dy*dy];            for k = 1:1:4                for l = 1:1:4                    I(k,l,:) = double(Img(iTab(k),jTab(l),:));                end            end            Img_0(i,j,1) = Wx*I(:,:,1)*Wy;            Img_0(i,j,2) = Wx*I(:,:,2)*Wy;            Img_0(i,j,3) = Wx*I(:,:,3)*Wy;        end    endend

同一张原始影像采用不同的缩放比例,重采样结果如下图所示:


04b7cc3b9c45ce7c3f789652b73c025f.png

采用不同方法缩小图像:

7581a0cf9885a26d488cdcc6269edb63.png

采用不同方法放大图像:

3d4adc97ae2ddeabd2853d2f1cbed89f.png

图像放大后的局部显示效果:

c7682d8d76886d6cad8435562aff44ed.png

效果评价:上图可以看出,双线性插值采样结果图像边界模糊;另外两种方法结果边界清晰!


版权声明:本文为weixin_36475451原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。