MATLAB实现遥感图像预处理——图像变换
前言
這些代碼均是使用最基礎(chǔ)的方法,通過(guò)一步一步迭代過(guò)程來(lái)理解算法的原理及實(shí)現(xiàn)過(guò)程,并不采用于實(shí)用工程,讀者以此作為學(xué)習(xí)參考即可。
圖像變換
讀取遙感圖像,以測(cè)繪衛(wèi)星獲取的光學(xué)遙感圖像為例:
1、圖像變換:
(1)圖像反轉(zhuǎn):
(2)對(duì)數(shù)變換:
(3)冪次變換:
2、使用算數(shù)、邏輯操作進(jìn)行增強(qiáng),在兩幅或多幅圖之間進(jìn)行。
(1)二值圖像操作
從一幅圖像中提取子圖像,例如,提取體育館的圖像,其他區(qū)域變?yōu)楹谏尘啊?br /> (2)兩幅圖像的差異圖像
求比值、求差值、變化檢測(cè)。
運(yùn)行結(jié)果
1、變換函數(shù)的曲線圖像
(1)二值變換函數(shù)與反轉(zhuǎn)變換函數(shù)圖像
變換函數(shù)函數(shù)分析:二值化函數(shù)是將圖像中小于設(shè)定閾值的灰度值全部設(shè)為0,大于等于閾值的設(shè)定為255,使圖像中僅存在黑和白兩種顏色,灰度值只有0和255。反轉(zhuǎn)變換是將圖像中灰度值高的部分變低,灰度值低的地方變高,將圖像中亮的部分與暗的部分交換。
(2)不同系數(shù)的對(duì)數(shù)變換函數(shù)圖像
變換函數(shù)分析:對(duì)數(shù)變換函數(shù)會(huì)將輸入圖像的灰度值中較暗部分映射到較大的范圍去,而較亮部分則會(huì)映射到較小的區(qū)域。這個(gè)函數(shù)會(huì)將圖像暗處的細(xì)節(jié)放大,壓縮亮處的細(xì)節(jié)。
(3)不同系數(shù)以及不同指數(shù)冪次變換函數(shù)圖像
變換函數(shù)分析:當(dāng)指數(shù)b<1時(shí),效果和對(duì)數(shù)函數(shù)相似,放大暗處細(xì)節(jié),壓縮亮處細(xì)節(jié),隨著數(shù)值減少,效果越強(qiáng);而當(dāng)指數(shù)b>1時(shí),放大亮處細(xì)節(jié),壓縮暗處細(xì)節(jié),隨著數(shù)值增大,效果越強(qiáng)。
2、圖像處理結(jié)果
(1)圖像反轉(zhuǎn)變換結(jié)果及分析
分析:從上圖可以看出,原圖中黑色的部分變成了白色,而白色則變成了黑色,灰度值處于中間的部分也對(duì)稱反轉(zhuǎn),原圖中白色的部分變得更為清晰.
(2)圖像對(duì)數(shù)變換結(jié)果及分析
分析:對(duì)數(shù)變換將圖像中較暗的部分映射到大范圍,亮的部分壓縮到很小的范圍,突出較暗部分的細(xì)節(jié),圖像整體偏亮。其中系數(shù)c則影響了變換后圖像的整體亮度,c越大,圖像越亮。
(3)圖像冪次變換結(jié)果及分析
分析:當(dāng)指數(shù)b<1時(shí),效果和對(duì)數(shù)函數(shù)相似,放大暗處細(xì)節(jié),壓縮亮處細(xì)節(jié),隨著數(shù)值減少,效果越強(qiáng);而當(dāng)指數(shù)b>1時(shí),放大亮處細(xì)節(jié),壓縮暗處細(xì)節(jié),隨著數(shù)值增大,效果越強(qiáng),圖像整體看起來(lái)更加偏暗。
3、使用算數(shù)、邏輯操作進(jìn)行增強(qiáng)
(1)提取子圖像
先設(shè)立一個(gè)與原圖大小相同的模板圖,其中對(duì)感興趣部分處的值設(shè)定為1,其余部分為背景部分,取值為0。然后通過(guò)算術(shù)運(yùn)算將模板圖與原圖對(duì)應(yīng)相乘,提取出子圖像。
(2)求差值
上述處理步驟:將原圖像1進(jìn)行二次變換,原圖像2進(jìn)行0.3次變換,然后用原圖1減去原圖2,將相減后的圖像歸一化,然后設(shè)定閾值為0.72,進(jìn)行二值化處理,得到的圖像再經(jīng)過(guò)3*3的方塊進(jìn)行開(kāi)操作,得到最終結(jié)果。
源代碼
clc; clearvars close all;x=0:0.01:255; y1=0.*(x>=0&x<128)+255.*(x>=128&x<=255); y2=256-1-x; figure(1) subplot(2,1,1),plot(x,y1);title('二值化變換函數(shù)圖像');xlabel('r');ylabel('s'); subplot(2,1,2),plot(x,y2);title('反轉(zhuǎn)變換函數(shù)圖像');xlabel('r');ylabel('s');x=0:0.01:255; y3=1*log(x+1); y4=2*log(x+1); y5=5*log(x+1); figure(2) subplot(1,1,1),plot(x,y3);title('不同系數(shù)c對(duì)數(shù)變換函數(shù)圖像');xlabel('r');ylabel('s');hold on; plot(x,y4);hold on; plot(x,y5); legend('系數(shù)為1的對(duì)數(shù)變換函數(shù)圖像','系數(shù)為2的對(duì)數(shù)變換函數(shù)圖像','系數(shù)為5的對(duì)數(shù)變換函數(shù)圖像'); %改變參數(shù)c x=0:0.01:1; y6=1*x.^2; y7=2*x.^2; y8=5*x.^2; figure(3) subplot(1,1,1),plot(x,y6);title('不同系數(shù)c冪次變換函數(shù)圖像');xlabel('r');ylabel('s');hold on; plot(x,y7);hold on; plot(x,y8); legend('系數(shù)為1的2次變換函數(shù)圖像','系數(shù)為2的2次變換函數(shù)圖像','系數(shù)為5的2次變換函數(shù)圖像'); %改變參數(shù)b x=0:0.01:1; y9=1*x.^2; y10=1*x.^1; y11=1*x.^0.5; y12=1*x.^0.25; y13=1*x.^4; figure(4) subplot(1,1,1),plot(x,y9);title('同系數(shù)不同冪次b變換函數(shù)圖像');xlabel('r');ylabel('s');hold on; plot(x,y10);hold on; plot(x,y11);hold on; plot(x,y12);hold on; plot(x,y13); legend('系數(shù)為1的2次變換函數(shù)圖像','系數(shù)為1的1次變換函數(shù)圖像','系數(shù)為1的0.5次變換函數(shù)圖像','系數(shù)為1的0.25次變換函數(shù)圖像','系數(shù)為1的4次變換函數(shù)圖像');%圖像處理 Im1 = imread('ygtx.jpg'); Im2 = rgb2gray(Im1); [xxx,yyy,z]=size(Im2); figure(5) subplot(2,1,1),imshow(Im1),title('原圖像'); subplot(2,1,2),imshow(Im2),title('原圖像灰度圖'); %圖像反轉(zhuǎn) figure(6) subplot(2,1,1),imshow(Im2),title('原圖像灰度圖'); fanzhuan=zeros(xxx,yyy); fanzhuan=256-1-Im2; subplot(2,1,2),imshow(fanzhuan,[]),title('原圖像反轉(zhuǎn)圖'); %對(duì)數(shù)變換 ds=double(Im2); figure(7) subplot(2,2,1),imshow(Im2),title('原圖像灰度圖'); duishu1=zeros(xxx,yyy); duishu1=1*log(ds+1); subplot(2,2,2),imshow(duishu1,[]),title('系數(shù)為1的對(duì)數(shù)變換后圖像'); duishu2=zeros(xxx,yyy); duishu2=0.0005*log(ds+1); subplot(2,2,3),imshow(duishu2,[]),title('系數(shù)為0.0005的對(duì)數(shù)變換后圖像'); duishu3=zeros(xxx,yyy); duishu3=50000*log(ds+1); subplot(2,2,4),imshow(duishu3,[]),title('系數(shù)為50000的對(duì)數(shù)變換后圖像'); %duishuc=duishu3-duishu2; %figure(8) %imshow(duishuc); %冪次變換 mc=double(Im2); figure(9) subplot(2,2,1),imshow(Im2),title('原圖像灰度圖'); mici1=zeros(xxx,yyy); mici1=1*mc.^0.5; subplot(2,2,2),imshow(mici1,[]),title('系數(shù)為1的0.5次變換后圖像'); mici2=zeros(xxx,yyy); mici2=1*mc.^2; subplot(2,2,3),imshow(mici2,[]),title('系數(shù)為1的2次變換后圖像'); mici3=zeros(xxx,yyy); mici3=1*mc.^4; subplot(2,2,4),imshow(mici3,[]),title('系數(shù)為1的4次變換后圖像');%提取子圖像 tq=zeros(xxx,yyy); for i=120:190for j=330:520tq(i,j)=1;end end tq1=zeros(xxx,yyy); for i=1:xxxfor j=1:yyytq1(i,j)=Im2(i,j)*tq(i,j);end end figure(10) subplot(2,2,1),imshow(Im2),title('原圖像灰度圖'); subplot(2,2,2),imshow(tq,[]),title('提取模板圖'); subplot(2,2,3),imshow(tq1,[]),title('提取子圖'); %求圖像差異 san11=imread('san_1.bmp'); san22=imread('san_2.bmp'); san3=imread('san_gt.bmp'); san2=mat2gray(double(san22)); san1=mat2gray(double(san11)); san1=san1.^2; san2=san2.^0.3; [xx,yy,zz]=size(san11); sangt=san1-san2; sangt=mat2gray(sangt); sangt1=zeros(xx,yy); for i=1:xxfor j=1:yyif sangt(i,j)>=0.72sangt1(i,j)=1;elsesangt1(i,j)=0;endend end se2=strel('square',3); sangt2=imopen(sangt1,se2); figure(11) subplot(3,2,1),imshow(san11),title('原圖像1'); subplot(3,2,2),imshow(san22),title('原圖像2'); subplot(3,2,3),imshow(san3),title('標(biāo)準(zhǔn)差結(jié)果'); subplot(3,2,4),imshow(sangt),title('差值結(jié)果'); subplot(3,2,5),imshow(sangt2,[]),title('差值處理結(jié)果');最開(kāi)始寫的代碼比較隨意,圖片也是隨意找的,沒(méi)有注釋,給大家磕了。
總結(jié)
以上是生活随笔為你收集整理的MATLAB实现遥感图像预处理——图像变换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 浏览器内核以及渲染过程
- 下一篇: 计算机丢失lame,【图片】小白求教如何