MATLAB实现遥感图像预处理——图像变换
前言
這些代碼均是使用最基礎的方法,通過一步一步迭代過程來理解算法的原理及實現過程,并不采用于實用工程,讀者以此作為學習參考即可。
圖像變換
讀取遙感圖像,以測繪衛星獲取的光學遙感圖像為例:
1、圖像變換:
(1)圖像反轉:
(2)對數變換:
(3)冪次變換:
2、使用算數、邏輯操作進行增強,在兩幅或多幅圖之間進行。
(1)二值圖像操作
從一幅圖像中提取子圖像,例如,提取體育館的圖像,其他區域變為黑色背景。
(2)兩幅圖像的差異圖像
求比值、求差值、變化檢測。
運行結果
1、變換函數的曲線圖像
(1)二值變換函數與反轉變換函數圖像
變換函數函數分析:二值化函數是將圖像中小于設定閾值的灰度值全部設為0,大于等于閾值的設定為255,使圖像中僅存在黑和白兩種顏色,灰度值只有0和255。反轉變換是將圖像中灰度值高的部分變低,灰度值低的地方變高,將圖像中亮的部分與暗的部分交換。
(2)不同系數的對數變換函數圖像
變換函數分析:對數變換函數會將輸入圖像的灰度值中較暗部分映射到較大的范圍去,而較亮部分則會映射到較小的區域。這個函數會將圖像暗處的細節放大,壓縮亮處的細節。
(3)不同系數以及不同指數冪次變換函數圖像
變換函數分析:當指數b<1時,效果和對數函數相似,放大暗處細節,壓縮亮處細節,隨著數值減少,效果越強;而當指數b>1時,放大亮處細節,壓縮暗處細節,隨著數值增大,效果越強。
2、圖像處理結果
(1)圖像反轉變換結果及分析
分析:從上圖可以看出,原圖中黑色的部分變成了白色,而白色則變成了黑色,灰度值處于中間的部分也對稱反轉,原圖中白色的部分變得更為清晰.
(2)圖像對數變換結果及分析
分析:對數變換將圖像中較暗的部分映射到大范圍,亮的部分壓縮到很小的范圍,突出較暗部分的細節,圖像整體偏亮。其中系數c則影響了變換后圖像的整體亮度,c越大,圖像越亮。
(3)圖像冪次變換結果及分析
分析:當指數b<1時,效果和對數函數相似,放大暗處細節,壓縮亮處細節,隨著數值減少,效果越強;而當指數b>1時,放大亮處細節,壓縮暗處細節,隨著數值增大,效果越強,圖像整體看起來更加偏暗。
3、使用算數、邏輯操作進行增強
(1)提取子圖像
先設立一個與原圖大小相同的模板圖,其中對感興趣部分處的值設定為1,其余部分為背景部分,取值為0。然后通過算術運算將模板圖與原圖對應相乘,提取出子圖像。
(2)求差值
上述處理步驟:將原圖像1進行二次變換,原圖像2進行0.3次變換,然后用原圖1減去原圖2,將相減后的圖像歸一化,然后設定閾值為0.72,進行二值化處理,得到的圖像再經過3*3的方塊進行開操作,得到最終結果。
源代碼
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('二值化變換函數圖像');xlabel('r');ylabel('s'); subplot(2,1,2),plot(x,y2);title('反轉變換函數圖像');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('不同系數c對數變換函數圖像');xlabel('r');ylabel('s');hold on; plot(x,y4);hold on; plot(x,y5); legend('系數為1的對數變換函數圖像','系數為2的對數變換函數圖像','系數為5的對數變換函數圖像'); %改變參數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('不同系數c冪次變換函數圖像');xlabel('r');ylabel('s');hold on; plot(x,y7);hold on; plot(x,y8); legend('系數為1的2次變換函數圖像','系數為2的2次變換函數圖像','系數為5的2次變換函數圖像'); %改變參數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('同系數不同冪次b變換函數圖像');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('系數為1的2次變換函數圖像','系數為1的1次變換函數圖像','系數為1的0.5次變換函數圖像','系數為1的0.25次變換函數圖像','系數為1的4次變換函數圖像');%圖像處理 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('原圖像灰度圖'); %圖像反轉 figure(6) subplot(2,1,1),imshow(Im2),title('原圖像灰度圖'); fanzhuan=zeros(xxx,yyy); fanzhuan=256-1-Im2; subplot(2,1,2),imshow(fanzhuan,[]),title('原圖像反轉圖'); %對數變換 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('系數為1的對數變換后圖像'); duishu2=zeros(xxx,yyy); duishu2=0.0005*log(ds+1); subplot(2,2,3),imshow(duishu2,[]),title('系數為0.0005的對數變換后圖像'); duishu3=zeros(xxx,yyy); duishu3=50000*log(ds+1); subplot(2,2,4),imshow(duishu3,[]),title('系數為50000的對數變換后圖像'); %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('系數為1的0.5次變換后圖像'); mici2=zeros(xxx,yyy); mici2=1*mc.^2; subplot(2,2,3),imshow(mici2,[]),title('系數為1的2次變換后圖像'); mici3=zeros(xxx,yyy); mici3=1*mc.^4; subplot(2,2,4),imshow(mici3,[]),title('系數為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('標準差結果'); subplot(3,2,4),imshow(sangt),title('差值結果'); subplot(3,2,5),imshow(sangt2,[]),title('差值處理結果');最開始寫的代碼比較隨意,圖片也是隨意找的,沒有注釋,給大家磕了。
總結
以上是生活随笔為你收集整理的MATLAB实现遥感图像预处理——图像变换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浏览器内核以及渲染过程
- 下一篇: 计算机丢失lame,【图片】小白求教如何