MatLab:数字图像处理实验
生活随笔
收集整理的這篇文章主要介紹了
MatLab:数字图像处理实验
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
圖像處理基本處理
- 實驗目的
- 實驗環境
- 實驗內容
- 題目一
- 代碼
- 結果
- 題目二
- 平移
- 平移代碼
- 平移結果
- 水平鏡像
- 水平鏡像代碼
- 水平鏡像結果
- 垂直鏡像
- 垂直鏡像代碼
- 垂直鏡像結果
- 放大
- 放大代碼
- 放大結果
- 縮小
- 縮小代碼
- 縮小結果
- 旋轉
- 旋轉代碼
- 旋轉結果
- 雙線性旋轉
- 旋轉代碼
- 旋轉結果
實驗目的
1、熟悉并掌握MATLAB工具的使用;?
2、實現圖像的讀取、顯示、存儲、平移、鏡像、放大、縮小及旋轉操作;
3、掌握常用的插值方法,并了解其優缺點。
實驗環境
MatLab2016
實驗內容
題目一
讀入一幅RGB圖像,變換為灰度圖像和二值圖像,并在同一個窗口內分別顯示RGB圖像和灰度圖像,注上文字標題,并將結果以文件形式存到磁盤上。
代碼
I = imread('D:\Backup\Documents\My Pictures\Saved Pictures\picture1.jpg'); subplot(3,1,1); imshow(I); title('原圖像'); i = rgb2gray(I); subplot(3,1,2); imshow(i); title('灰度圖像'); imwrite(i,'D:\Backup\Documents\My Pictures\Saved Pictures\picture2.jpg'); a = im2bw(I,0.5); subplot(3,1,3); imshow(a); title('二值圖像'); imwrite(a,'D:\Backup\Documents\My Pictures\Saved Pictures\picture3.jpg');結果
題目二
對圖像執行平移、鏡像(水平鏡像、垂直鏡像)放大、縮小及旋轉操作,其中放大、旋轉操作分別采用最近鄰插值及雙線性插值方法實現,要求根據算法自己編寫代碼實現,并分析兩種插值方法的優缺點。
平移
平移代碼
I=imread('D:\Backup\Documents\My Pictures\Saved Pictures\picture1.jpg'); subplot(2,1,1); imshow(I); title('原圖像'); [M,N,C]=size(I); g=zeros(M,N,C);for color=1:3for i=1:Mfor j=1:Nnewx=i+30;newy=j+30;if((newx<=M)&&(newy<=N))g(newx,newy,color)=I(i,j,color);endendendend subplot(2,1,2); imshow(uint8(g)); title('平移');平移結果
水平鏡像
水平鏡像代碼
I=imread('D:\Backup\Documents\My Pictures\Saved Pictures\picture1.jpg'); subplot(2,1,1); imshow(I); title('原圖像');[M,N,C]=size(I); g=zeros(M,N,C); for color=1:3for i=1:Mfor j=1:N-1g(i,j,color)=I(i,N-j,color);endend end subplot(2,1,2); imshow(uint8(g)); title('水平鏡像');水平鏡像結果
垂直鏡像
垂直鏡像代碼
I=imread('D:\Backup\Documents\My Pictures\Saved Pictures\picture1.jpg'); subplot(2,1,1); imshow(I); title('原圖像'); [M,N,C]=size(I); g=zeros(M,N,C); for color=1:3 for i=1:M-1for j=1:Ng(i,j,color)=I(M-i,j,color);end end end subplot(2,1,2); imshow(uint8(g)); title(‘垂直鏡像’);垂直鏡像結果
放大
放大代碼
I=imread('D:\Backup\Documents\My Pictures\Saved Pictures\picture1.jpg'); figure; imshow(I); title('原圖'); g=imresize(I,2); figure; imshow(g); title('放大');放大結果
縮小
縮小代碼
I=imread('D:\Backup\Documents\My Pictures\Saved Pictures\picture1.jpg'); figure; imshow(I); title('原圖'); g=imresize(I,0.5); figure; imshow(g); title('縮放');縮小結果
旋轉
旋轉代碼
im = imread('D:\Backup\Documents\My Pictures\Saved Pictures\picture1.jpg'); % 讀入圖片 subplot(2,1,1); imshow(im); title('原圖'); % 求出旋轉矩陣 a = 30 / 180 * pi; R = [cos(a), -sin(a); sin(a), cos(a)]; R = R'; % 求出旋轉矩陣的逆矩陣進行逆向查找 % 計算原圖大小 sz = size(im); h = sz(1); w = sz(2); ch = sz(3); c1 = [h; w] / 2; % 計算顯示完整圖像需要的畫布大小 hh = floor(w*sin(a)+h*cos(a))+1; ww = floor(w*cos(a)+h*sin(a))+1; c2 = [hh; ww] / 2; % 初始化目標畫布 im2 = uint8(ones(hh, ww, 3)*128); for k = 1:chfor i = 1:hhfor j = 1:wwp = [i; j];pp = round(R*(p-c2)+c1);% 逆向進行像素查找if (pp(1) >= 1 && pp(1) <= h && pp(2) >= 1 && pp(2) <= w)im2(i, j, k) = im(pp(1), pp(2), k); endendend end % 顯示圖像 subplot(2,1,2); imshow(im2); title('旋轉');旋轉結果
雙線性旋轉
旋轉代碼
im = imread('D:\Backup\Documents\My Pictures\Saved Pictures\picture1.jpg'); subplot(2,1,1); imshow(im); title('原圖'); % 求出旋轉矩陣 a = 30 / 180 * pi; R = [cos(a), -sin(a); sin(a), cos(a)]; R = R'; % 求出旋轉矩陣的逆矩陣進行逆向查找 % 計算原圖大小 sz = size(im); h = sz(1); w = sz(2); ch = sz(3); c1 = [h; w] / 2; % 計算顯示完整圖像需要的畫布大小 hh = floor(w*sin(a)+h*cos(a))+1; ww = floor(w*cos(a)+h*sin(a))+1; c2 = [hh; ww] / 2; % 初始化目標畫布 im2 = uint8(ones(hh, ww, 3)*128); for k = 1:chfor i = 1:hhfor j = 1:wwp = [i; j];pp = (R*(p-c2)+c1);mn = floor(pp);ab = pp - mn;a = ab(1);b = ab(2);m = mn(1);n = mn(2);% 線性插值方法if (pp(1) >= 2 && pp(1) <= h-1 && pp(2) >= 2 && pp(2) <= w-1)im2(i, j, k) = (1-a)*(1-b)*im(m, n, k) + a*(1-b)*im(m+1, n, k)...+ (1-a)*b*im(m, n, k) + a*b*im(m, n, k);endendend end % 顯示圖像 subplot(2,1,2); imshow(im2); title('線性旋轉');旋轉結果
有參考許多csdn文章。
總結
以上是生活随笔為你收集整理的MatLab:数字图像处理实验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件测试基础
- 下一篇: 软件测试基础理论(总结)