字圖像縮放算法對(duì)比:MATLAB實(shí)現(xiàn)與性能分析)
簡(jiǎn)介這份資源是一篇電子信息工程專(zhuān)業(yè)的本科畢業(yè)設(shè)計(jì)論文題目為《數(shù)字圖像縮放技術(shù)研究》面向圖像處理方向的學(xué)生與研究人員尤其適合正在準(zhǔn)備相關(guān)課題或需要參考完整論文結(jié)構(gòu)的學(xué)習(xí)者。壓縮包內(nèi)僅含1個(gè)doc文檔大小約2.05MB內(nèi)容涵蓋數(shù)字電視視頻格式、數(shù)學(xué)插值理論、MATLAB仿真環(huán)境介紹以及經(jīng)典插值算法的實(shí)現(xiàn)與對(duì)比分析。論文從數(shù)字圖像處理基礎(chǔ)出發(fā)系統(tǒng)梳理了最近鄰域插值、雙線性插值、雙三次插值等算法的原理與優(yōu)缺點(diǎn)并借助MATLAB編程完成圖像縮放實(shí)驗(yàn)對(duì)多種算法的性能與運(yùn)算量進(jìn)行了量化比較。目錄結(jié)構(gòu)完整包含摘要、緒論、理論基礎(chǔ)、算法實(shí)現(xiàn)與實(shí)驗(yàn)分析等章節(jié)可直接作為畢業(yè)論文寫(xiě)作范本或算法學(xué)習(xí)參考資料。目前已有907人學(xué)習(xí)下載適合需要了解圖像縮放技術(shù)、掌握MATLAB圖像處理編程或撰寫(xiě)同類(lèi)論文的讀者參考借鑒。1. 從一次課程設(shè)計(jì)答辯說(shuō)起為什么圖像縮放值得做成一篇畢業(yè)論文很多同學(xué)拿到“數(shù)字圖像處理畢業(yè)論文”這個(gè)題目時(shí)第一反應(yīng)是去網(wǎng)上找一段雙線性插值的代碼跑通就交差。但真正做過(guò)答辯的人都知道導(dǎo)師最常問(wèn)的一句話是“你這幾種算法到底差在哪運(yùn)算量差多少什么場(chǎng)景該用哪個(gè)”如果答不上來(lái)論文寫(xiě)得再厚也撐不住。數(shù)字圖像縮放技術(shù)研究這個(gè)題目核心不是把圖像放大縮小而是把最近鄰插值、雙線性插值、雙三次插值這三種經(jīng)典算法以及基于邊緣提取、Ferguson曲面、帶系數(shù)自適應(yīng)等改進(jìn)算法放在同一套MATLAB實(shí)驗(yàn)框架下用峰值信噪比和運(yùn)算時(shí)間兩個(gè)維度做橫向?qū)Ρ取Km合電子信息工程、通信工程、計(jì)算機(jī)相關(guān)專(zhuān)業(yè)的本科畢設(shè)或課程設(shè)計(jì)也適合需要快速搭建圖像處理算法對(duì)比實(shí)驗(yàn)的從業(yè)者參考。整篇論文的骨架其實(shí)就三件事把插值數(shù)學(xué)講清楚把算法用MATLAB實(shí)現(xiàn)出來(lái)把性能和運(yùn)算量對(duì)比明白。2. 需求分析與技術(shù)選型為什么是MATLAB加插值算法這條路線2.1 數(shù)字電視視頻格式對(duì)縮放技術(shù)的硬約束論文的工程背景落在數(shù)字電視的視頻格式變換上這不是隨便選的切入點(diǎn)。常見(jiàn)的1080i格式是1920×1080隔行掃描720P是1280×720逐行掃描1080P是1920×1080逐行掃描。終端顯示設(shè)備的固有分辨率千差萬(wàn)別從早期CRT到液晶、等離子再到手機(jī)小屏接收數(shù)字電視信號(hào)同一路信號(hào)源要在不同分辨率的屏幕上正常顯示就必須做分辨率變換。這就給縮放算法提出了兩個(gè)硬指標(biāo)一是圖像質(zhì)量不能明顯退化二是運(yùn)算量要能支撐實(shí)時(shí)或準(zhǔn)實(shí)時(shí)處理。論文里把這兩個(gè)指標(biāo)拆成峰值信噪比和單幀處理時(shí)間來(lái)量化這個(gè)思路是對(duì)的因?yàn)槊撾x運(yùn)算量談畫(huà)質(zhì)沒(méi)有工程意義。2.2 三種經(jīng)典插值算法的定位差異最近鄰插值取離目標(biāo)點(diǎn)最近的源像素值運(yùn)算量最小但邊緣鋸齒明顯雙線性插值用周?chē)膫€(gè)像素做加權(quán)平均平滑度提升但會(huì)模糊高頻細(xì)節(jié)雙三次插值用周?chē)鶄€(gè)像素做三次卷積邊緣保持更好但運(yùn)算量成倍增加。論文的實(shí)驗(yàn)設(shè)計(jì)需要把這三者放在同一組測(cè)試圖像上跑才能看出差異。我一般會(huì)建議選三張測(cè)試圖一張含大量文字邊緣的、一張自然風(fēng)景的、一張人臉特寫(xiě)的這樣不同算法的優(yōu)劣在不同內(nèi)容上都能暴露出來(lái)。2.3 MATLAB作為實(shí)驗(yàn)平臺(tái)的理由選MATLAB不是因?yàn)樗昂?jiǎn)單”而是因?yàn)樗木仃囘\(yùn)算天然適配圖像處理。一幅灰度圖像在MATLAB里就是一個(gè)二維矩陣縮放操作本質(zhì)上就是矩陣重采樣。MATLAB圖像處理工具箱提供了imresize作為基準(zhǔn)但論文要求自己編寫(xiě)算法實(shí)現(xiàn)所以核心插值邏輯必須手寫(xiě)。下面這段代碼展示了雙線性插值的核心實(shí)現(xiàn)框架function output bilinear_interp(input, scale) % input: 輸入灰度圖像矩陣 % scale: 縮放因子大于1為放大小于1為縮小 [h, w] size(input); new_h round(h * scale); new_w round(w * scale); output zeros(new_h, new_w); for i 1:new_h for j 1:new_w % 映射回原圖坐標(biāo) src_x (i - 0.5) / scale 0.5; src_y (j - 0.5) / scale 0.5; % 取四個(gè)最近鄰點(diǎn) x1 floor(src_x); x2 min(x1 1, h); y1 floor(src_y); y2 min(y1 1, w); x1 max(x1, 1); y1 max(y1, 1); % 計(jì)算權(quán)重 dx src_x - x1; dy src_y - y1; % 雙線性加權(quán) output(i, j) (1-dx)*(1-dy)*input(x1, y1) ... dx*(1-dy)*input(x2, y1) ... (1-dx)*dy*input(x1, y2) ... dx*dy*input(x2, y2); end end output uint8(output); end這段代碼的關(guān)鍵在于坐標(biāo)映射公式(i - 0.5) / scale 0.5它保證了像素中心對(duì)齊避免整體偏移半個(gè)像素。權(quán)重計(jì)算部分用四個(gè)角點(diǎn)的灰度值做加權(quán)求和權(quán)重由目標(biāo)點(diǎn)到四個(gè)角點(diǎn)的距離決定。實(shí)際跑的時(shí)候要注意輸入圖像先轉(zhuǎn)成double類(lèi)型再運(yùn)算否則uint8的截?cái)嗾`差會(huì)讓結(jié)果偏暗。2.4 改進(jìn)算法的引入邏輯論文在三種經(jīng)典算法之后引入了四種改進(jìn)算法基于近鄰插值與鄰域取平均的縮小算法、基于Ferguson曲面插值的縮放方法、帶系數(shù)自適應(yīng)插值算法、基于邊緣提取的定向插值算法。這四種算法的共同思路是在傳統(tǒng)插值基礎(chǔ)上引入局部結(jié)構(gòu)信息。比如邊緣提取的定向插值先判斷當(dāng)前像素是否處于邊緣區(qū)域如果是則沿邊緣方向插值而不是橫平豎直地插這樣能顯著減少邊緣鋸齒。帶系數(shù)自適應(yīng)插值則根據(jù)局部梯度動(dòng)態(tài)調(diào)整插值核的系數(shù)平坦區(qū)域用平滑核邊緣區(qū)域用銳化核。這些改進(jìn)算法的MATLAB實(shí)現(xiàn)比經(jīng)典算法復(fù)雜但核心框架不變都是在坐標(biāo)映射之后增加一個(gè)方向判斷或系數(shù)調(diào)整的步驟。3. 總體架構(gòu)設(shè)計(jì)從算法模塊到實(shí)驗(yàn)流程的完整拆解3.1 論文的模塊劃分與章節(jié)映射整篇論文按“理論—算法—實(shí)驗(yàn)—對(duì)比”四層推進(jìn)。第二章鋪數(shù)學(xué)基礎(chǔ)和MATLAB基礎(chǔ)第三章講三種經(jīng)典插值算法第四章展開(kāi)四種改進(jìn)算法第五章做實(shí)驗(yàn)對(duì)比。這個(gè)結(jié)構(gòu)的好處是每一章都有明確的交付物第二章交付插值數(shù)學(xué)定義和MATLAB圖像處理基礎(chǔ)第三章交付三種經(jīng)典算法的完整實(shí)現(xiàn)第四章交付四種改進(jìn)算法的實(shí)現(xiàn)和評(píng)價(jià)第五章交付性能與運(yùn)算量的對(duì)比數(shù)據(jù)。寫(xiě)論文的時(shí)候每一章末尾用一小段話交代“本章實(shí)現(xiàn)了什么、驗(yàn)證了什么”導(dǎo)師看起來(lái)會(huì)覺(jué)得邏輯鏈完整。3.2 算法實(shí)現(xiàn)的統(tǒng)一接口設(shè)計(jì)為了讓后續(xù)對(duì)比實(shí)驗(yàn)?zāi)茏詣?dòng)化跑所有算法實(shí)現(xiàn)應(yīng)該統(tǒng)一函數(shù)簽名。我一般會(huì)定義成output algorithm_name(input, scale)的形式輸入是灰度圖像矩陣和縮放因子輸出是縮放后的圖像矩陣。這樣在第五章的對(duì)比腳本里只需要一個(gè)循環(huán)就能把所有算法跑一遍% 算法對(duì)比實(shí)驗(yàn)主腳本 algorithms {nearest_interp, bilinear_interp, bicubic_interp, ... edge_directed_interp, ferguson_interp}; scale_factors [0.5, 2.0, 4.0]; test_images {text.png, landscape.png, face.png}; for img_idx 1:length(test_images) img imread(test_images{img_idx}); if size(img, 3) 3 img rgb2gray(img); % 統(tǒng)一轉(zhuǎn)灰度處理 end img double(img); for alg_idx 1:length(algorithms) for s_idx 1:length(scale_factors) tic; result algorithms{alg_idx}(img, scale_factors(s_idx)); elapsed toc; % 計(jì)算PSNR需要先統(tǒng)一尺寸 psnr_val compute_psnr(img, result, scale_factors(s_idx)); % 記錄結(jié)果 fprintf(圖像:%s 算法:%s 縮放:%.1f PSNR:%.2f 時(shí)間:%.4fs\n, ... test_images{img_idx}, func2str(algorithms{alg_idx}), ... scale_factors(s_idx), psnr_val, elapsed); end end end這個(gè)腳本的設(shè)計(jì)要點(diǎn)是用函數(shù)句柄數(shù)組管理所有算法用tic/toc記錄運(yùn)算時(shí)間用compute_psnr統(tǒng)一計(jì)算質(zhì)量指標(biāo)。注意PSNR計(jì)算時(shí)需要把縮放后的圖像和參考圖像對(duì)齊尺寸放大時(shí)參考圖像是原圖縮小時(shí)需要先把原圖縮小到目標(biāo)尺寸再比較否則PSNR沒(méi)有意義。3.3 性能評(píng)價(jià)指標(biāo)的定義論文里用了峰值信噪比和運(yùn)算時(shí)間兩個(gè)指標(biāo)。PSNR的計(jì)算公式是function psnr_val compute_psnr(original, processed, scale) % 統(tǒng)一到相同尺寸 if scale 1 % 放大原圖作為參考 ref original; test processed(1:size(original,1), 1:size(original,2)); else % 縮小先把原圖縮到目標(biāo)尺寸作為參考 ref imresize(original, scale, bicubic); test processed; end mse mean((double(ref(:)) - double(test(:))).^2); if mse 0 psnr_val Inf; else psnr_val 10 * log10(255^2 / mse); end end這里有個(gè)容易翻車(chē)的點(diǎn)縮小時(shí)如果用原圖直接和縮小后的圖像算PSNR尺寸對(duì)不上會(huì)報(bào)錯(cuò)。通常的做法是先用雙三次插值把原圖縮到目標(biāo)尺寸作為參考基準(zhǔn)再拿各算法的結(jié)果和這個(gè)基準(zhǔn)比。雖然這樣參考基準(zhǔn)本身也有誤差但在同一基準(zhǔn)下比較各算法的相對(duì)優(yōu)劣是合理的。3.4 運(yùn)算量分析的量化方法運(yùn)算量不能只靠“感覺(jué)快慢”來(lái)描述論文里需要給出可復(fù)現(xiàn)的數(shù)據(jù)。我一般會(huì)從兩個(gè)維度量化一是單幀處理時(shí)間用tic/toc在相同硬件環(huán)境下跑十次取平均二是算法復(fù)雜度用大O表示法分析每個(gè)輸出像素需要訪問(wèn)的源像素?cái)?shù)量和乘法次數(shù)。最近鄰插值每個(gè)輸出像素訪問(wèn)1個(gè)源像素雙線性訪問(wèn)4個(gè)雙三次訪問(wèn)16個(gè)邊緣定向插值在邊緣區(qū)域訪問(wèn)8個(gè)、平坦區(qū)域訪問(wèn)4個(gè)。把這些數(shù)據(jù)列成表格放在第五章導(dǎo)師一看就知道你確實(shí)做了分析而不是抄的。4. 核心算法實(shí)現(xiàn)與避坑從經(jīng)典插值到邊緣定向改進(jìn)4.1 最近鄰插值的快速實(shí)現(xiàn)與邊界處理最近鄰插值的邏輯最簡(jiǎn)單但邊界處理容易出問(wèn)題。當(dāng)目標(biāo)像素映射回源圖坐標(biāo)超出圖像范圍時(shí)需要做邊界截?cái)鄁unction output nearest_interp(input, scale) [h, w] size(input); new_h round(h * scale); new_w round(w * scale); output zeros(new_h, new_w); for i 1:new_h for j 1:new_w src_x round((i - 0.5) / scale 0.5); src_y round((j - 0.5) / scale 0.5); % 邊界截?cái)喾乐顾饕浇?src_x max(1, min(src_x, h)); src_y max(1, min(src_y, w)); output(i, j) input(src_x, src_y); end end output uint8(output); endmax(1, min(src_x, h))這行是必須的因?yàn)楦↑c(diǎn)運(yùn)算的舍入誤差可能讓坐標(biāo)變成0或h1。不做截?cái)嗟脑扢ATLAB直接報(bào)索引越界這是新手最常翻車(chē)的地方。4.2 雙三次插值的核函數(shù)與權(quán)重計(jì)算雙三次插值用三次多項(xiàng)式作為插值核常用的核函數(shù)是function w cubic_kernel(x) % 雙三次插值核函數(shù)a -0.5 x abs(x); if x 1 w 1.5*x^3 - 2.5*x^2 1; elseif x 2 w -0.5*x^3 2.5*x^2 - 4*x 2; else w 0; end end這個(gè)核函數(shù)的特點(diǎn)是在距離0處值為1距離1處值為0距離2以外為0。實(shí)際計(jì)算時(shí)對(duì)周?chē)?6個(gè)像素分別求核函數(shù)值再歸一化加權(quán)。參數(shù)a控制核函數(shù)的形狀a-0.5是經(jīng)典值a-0.75會(huì)讓圖像更銳利但可能產(chǎn)生振鈴。論文里用a-0.5就夠了不需要在這個(gè)參數(shù)上糾結(jié)。4.3 邊緣定向插值的梯度判斷邏輯邊緣定向插值的核心是先判斷當(dāng)前像素是否在邊緣上如果在則沿邊緣方向插值。判斷方法用Sobel算子算梯度f(wàn)unction output edge_directed_interp(input, scale) [h, w] size(input); new_h round(h * scale); new_w round(w * scale); output zeros(new_h, new_w); % 預(yù)先計(jì)算梯度 [Gx, Gy] imgradientxy(input, sobel); grad_mag sqrt(Gx.^2 Gy.^2); grad_thresh mean(grad_mag(:)) * 1.5; % 自適應(yīng)閾值 for i 1:new_h for j 1:new_w src_x (i - 0.5) / scale 0.5; src_y (j - 0.5) / scale 0.5; x1 max(1, min(floor(src_x), h)); y1 max(1, min(floor(src_y), w)); if grad_mag(x1, y1) grad_thresh % 邊緣區(qū)域沿梯度垂直方向插值 theta atan2(Gy(x1,y1), Gx(x1,y1)); % 沿邊緣方向取兩個(gè)點(diǎn)做線性插值 dx cos(theta); dy sin(theta); p1 bilinear_sample(input, src_x - dx, src_y - dy); p2 bilinear_sample(input, src_x dx, src_y dy); output(i, j) 0.5 * (p1 p2); else % 平坦區(qū)域用雙線性插值 output(i, j) bilinear_sample(input, src_x, src_y); end end end output uint8(output); end這段代碼的關(guān)鍵是梯度閾值grad_thresh的選取。用全局梯度均值的1.5倍作為閾值是一個(gè)經(jīng)驗(yàn)值太低會(huì)把噪聲當(dāng)邊緣太高會(huì)漏掉弱邊緣。實(shí)際調(diào)試時(shí)可以先把梯度圖顯示出來(lái)看看確認(rèn)閾值是否合理。bilinear_sample是一個(gè)輔助函數(shù)在任意浮點(diǎn)坐標(biāo)處做雙線性采樣需要單獨(dú)實(shí)現(xiàn)。4.4 避坑與常見(jiàn)問(wèn)題排查現(xiàn)象一縮放后圖像整體偏暗或偏亮。原因通常是uint8和double類(lèi)型混用導(dǎo)致截?cái)嗾`差累積。解決方法是所有中間運(yùn)算都用double最后輸出時(shí)再轉(zhuǎn)uint8并且轉(zhuǎn)換前用min(max(x,0),255)做飽和截?cái)唷,F(xiàn)象二放大后圖像出現(xiàn)規(guī)則網(wǎng)格狀偽影。這是坐標(biāo)映射公式寫(xiě)錯(cuò)導(dǎo)致的常見(jiàn)錯(cuò)誤是用了i/scale而不是(i-0.5)/scale0.5。前者會(huì)讓像素中心偏移半個(gè)像素放大倍數(shù)越大偏移越明顯。檢查方法是用一個(gè)棋盤(pán)格圖像做放大測(cè)試看網(wǎng)格是否均勻?,F(xiàn)象三邊緣定向插值在某些圖像上效果反而變差。原因是梯度閾值不適合該圖像內(nèi)容。如果圖像本身噪聲大梯度圖會(huì)被噪聲主導(dǎo)導(dǎo)致平坦區(qū)域被誤判為邊緣。解決方法是先做一次高斯濾波再算梯度或者改用局部自適應(yīng)閾值?,F(xiàn)象四運(yùn)算時(shí)間對(duì)比數(shù)據(jù)不可復(fù)現(xiàn)。原因是沒(méi)有控制變量比如第一次跑的時(shí)候MATLAB還在加載工具箱后面跑就快了。解決方法是在計(jì)時(shí)前先跑一次預(yù)熱然后連續(xù)跑十次取平均并且關(guān)閉其他占用CPU的程序?,F(xiàn)象五PSNR計(jì)算時(shí)尺寸不匹配報(bào)錯(cuò)。放大時(shí)縮放后圖像尺寸可能比原圖大幾個(gè)像素因?yàn)閞ound需要裁剪到原圖尺寸再比較??s小時(shí)需要先把原圖縮到目標(biāo)尺寸作為參考。這個(gè)邏輯要封裝在compute_psnr里統(tǒng)一處理不要在每個(gè)算法里單獨(dú)寫(xiě)。5. 實(shí)驗(yàn)對(duì)比與驗(yàn)收怎么證明你的算法確實(shí)有效5.1 實(shí)驗(yàn)設(shè)計(jì)的三個(gè)控制變量對(duì)比實(shí)驗(yàn)要控制三個(gè)變量測(cè)試圖像內(nèi)容、縮放倍數(shù)、算法類(lèi)型。測(cè)試圖像至少選三類(lèi)文字邊緣豐富的、自然場(chǎng)景的、人臉細(xì)節(jié)的??s放倍數(shù)選0.5倍縮小、2倍放大、4倍放大三檔。算法覆蓋三種經(jīng)典加四種改進(jìn)共七種。這樣一共產(chǎn)生3×3×763組數(shù)據(jù)足夠支撐第五章的分析。每組數(shù)據(jù)記錄PSNR和運(yùn)算時(shí)間最后按算法類(lèi)型求平均畫(huà)成柱狀圖或折線圖。5.2 結(jié)果分析的寫(xiě)法第五章的寫(xiě)法不是把數(shù)據(jù)表格一貼就完事而是要回答三個(gè)問(wèn)題哪種算法在哪種場(chǎng)景下最優(yōu)改進(jìn)算法相比經(jīng)典算法提升了多少運(yùn)算量的增加是否值得比如可以這樣寫(xiě)“在2倍放大文字圖像時(shí)邊緣定向插值的PSNR比雙線性插值高2.3dB運(yùn)算時(shí)間增加約1.8倍但在4倍放大自然風(fēng)景時(shí)兩者PSNR差距縮小到0.7dB說(shuō)明邊緣定向插值的優(yōu)勢(shì)主要體現(xiàn)在邊緣豐富的場(chǎng)景。”這種帶條件的結(jié)論才是導(dǎo)師想看到的。5.3 答辯時(shí)怎么講清楚算法差異答辯時(shí)不要照著論文念而是用一張對(duì)比圖說(shuō)話。準(zhǔn)備一張包含文字和邊緣的測(cè)試圖把原圖、最近鄰放大結(jié)果、雙線性放大結(jié)果、雙三次放大結(jié)果、邊緣定向放大結(jié)果并排顯示讓評(píng)委一眼看出鋸齒、模糊、振鈴的區(qū)別。然后指著運(yùn)算時(shí)間表格說(shuō)“最近鄰最快但質(zhì)量最差雙三次質(zhì)量好但慢邊緣定向在邊緣區(qū)域質(zhì)量接近雙三次但速度快30%?!边@樣講比背公式有效得多。5.4 論文寫(xiě)作的進(jìn)度安排論文任務(wù)書(shū)里給了18周的進(jìn)度我一般會(huì)建議按這個(gè)節(jié)奏走第1-3周把插值數(shù)學(xué)和MATLAB基礎(chǔ)過(guò)一遍第3-6周把三種經(jīng)典算法實(shí)現(xiàn)出來(lái)并跑通第7-12周做改進(jìn)算法和對(duì)比實(shí)驗(yàn)第13-15周寫(xiě)論文初稿第16-18周修改和準(zhǔn)備答辯。關(guān)鍵節(jié)點(diǎn)是第6周末必須有三張經(jīng)典算法的結(jié)果圖否則后面改進(jìn)算法沒(méi)時(shí)間調(diào)。很多同學(xué)卡在雙三次插值的權(quán)重計(jì)算上其實(shí)直接用MATLAB的interp2函數(shù)做基準(zhǔn)自己寫(xiě)的和它對(duì)比差得不多就說(shuō)明邏輯對(duì)了。5.5 驗(yàn)收標(biāo)準(zhǔn)與自檢清單論文交付前用這份清單自檢三種經(jīng)典算法是否都有獨(dú)立實(shí)現(xiàn)且結(jié)果可復(fù)現(xiàn)四種改進(jìn)算法是否都有性能分析PSNR和運(yùn)算時(shí)間數(shù)據(jù)是否完整對(duì)比圖表是否清晰標(biāo)注了坐標(biāo)軸和單位參考文獻(xiàn)是否覆蓋了任務(wù)書(shū)列出的主要參考書(shū)答辯PPT是否能在10分鐘內(nèi)講完核心內(nèi)容如果這些都能做到這篇論文的完成度就足夠了。從那以后我每次帶學(xué)生做圖像處理相關(guān)的畢設(shè)都要求他們?cè)趯?xiě)論文之前先把所有算法的對(duì)比實(shí)驗(yàn)跑通數(shù)據(jù)拿到手再動(dòng)筆。因?yàn)檎撐睦锏姆治霰仨毥⒃谡鎸?shí)數(shù)據(jù)上而不是先寫(xiě)結(jié)論再補(bǔ)實(shí)驗(yàn)。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取