學習的過程向來不是容易的,創(chuàng)造一個作品的過程更是不容易的。因此,在文章的最后,提供了兩個現(xiàn)成的示例代碼,大家直接可以拿來運行。在完成大作業(yè)的時候,大家可以在已有作品的基礎(chǔ)上,按照自己的需求進行修改,添加我們課程要求的功能,并體會如何完成一個完整的項目。?
特別特別希望大家可以把下面的小功能整合成一個完整的項目~? 期待!
下面分功能演示實現(xiàn)細節(jié)(這些功能源自于發(fā)布的大作業(yè)要求):
1、導入圖片(或從攝像頭加載圖片 );
1)選擇文件夾打開照片;
% '*.*'為顯示當前文件夾中的所有文件;
% select a picture為文件對話框的標題;
% 'multiselect','on'為打開選擇多個模式(默認為關(guān));
% '.\'為要打開的文件路徑
[file,path] = uigetfile('*.*','select a picture','multiselect','on','.\');
file_path=fullfile(path,file);
img=imread(file_path);
imshow(img);
title("原圖像");
2)從攝像頭加載圖片;
加載攝像頭需要獲取硬件支持,所以在matlab上需要安裝一個類似于驅(qū)動的軟件,安裝了好久網(wǎng)速不給力呀?~? ?具體細節(jié)可參考:
MATLAB調(diào)用USB攝像頭實現(xiàn)過程_飛天長虹的博客-CSDN博客_matlab調(diào)用攝像頭
clear,clc,close all;
vid = videoinput('winvideo', 1, 'YUY2_640x480')
set(vid,'ReturnedColorSpace','rgb');
vidRes=get(vid,'VideoResolution');
width=vidRes(1);
height=vidRes(2);
nBands=get(vid,'NumberOfBands');
hImage=image(zeros(vidRes(2),vidRes(1),nBands));
preview(vid,hImage);
start(vid);
img = getsnapshot(vid);
image(img);
imshow(img);title("攝像頭獲取圖像");
2、彩色圖像灰度化;
3、灰度圖像二值化;
4、目標檢測(即兩幅圖像相減);
?功能2-4,請參考本人博客數(shù)字圖像處理之matlab實驗(一):基本操作_苗妮的博客-CSDN博客_matlab 形態(tài)學區(qū)域填充
5、圖像的灰度變換(包括指數(shù)變換、對數(shù)變換);
6、直方圖均衡化?
顯示處理后圖像和處理后圖像直方圖;處理前后對比效果顯示在一張圖中。
?功能5-6,請參考本人博客
數(shù)字圖像處理之matlab實驗(二):圖像增強_苗妮的博客-CSDN博客
7、圖像平滑(去除噪聲)
對圖像分別添加高斯噪聲和椒鹽噪聲,并分別用均值濾波器、中值濾波器、高斯濾波器處理,并將處理結(jié)果顯示在一張圖中;
8、圖像銳化(提取邊緣)
分別采用robert和二階算子提取圖像邊緣,并將處理結(jié)果顯示在一張圖中;
?功能7-8,請參考本人博客
數(shù)字圖像處理之matlab實驗(三):空間濾波器_苗妮的博客-CSDN博客
9、頻域處理
對圖像做平滑處理和提取邊緣,并將處理結(jié)果顯示在一張圖中;
10、圖像復原
對原圖做運動模糊,并進行圖像復原處理,將原圖、模糊圖、恢復后的模糊圖顯示在一張結(jié)果圖中;
功能9-10,參考本人博客:
11、形態(tài)學處理
(1)腐蝕、(2)膨脹、(3)開運算、(4)閉運算處理、(5)形態(tài)學濾波、(6)擊中與不擊中變換;
功能11,參考本人博客
數(shù)字圖像處理之matlab實驗(五):形態(tài)學圖像處理_苗妮的博客-CSDN博客
12、圖像分割(提取圖中的紅蘋果)?
(1)將已知圖像進行消噪處理
(2)對彩色圖像進行目標和背景分析
(3)通過顏色將圖像進行分割
(4)進行形態(tài)學處理,提取目標
在將蘋果分割的過程中,我們發(fā)現(xiàn)直方圖分割、閾值分割在這個場景下是失效的,此處給出的是kmeans算法,當然基于顏色的分割效果理論上也是ok的,代碼可以自己嘗試寫一下。
?
clear,clc,close all;
Image=imread('fruit.jpg');
subplot(121);imshow(Image),title('原圖像');
hsv=rgb2hsv(Image);
h=hsv(:,:,1);
h(h>330/360)=0;
[N,M]=size(h);
training=h(:);
startdata = [0;60/360;120/360;180/360;240/360;300/360];
[IDX,C]= kmeans(training,6,'Start',startdata);
idbw = (IDX == 1);
template = reshape(idbw, size(h));
subplot(122);imshow(template),title('分割后的圖像');
imwrite(template,'clusterseg.jpg');
13、硬幣檢測及計數(shù)?
(1)分割硬幣
(2)去除噪聲
(3)連通區(qū)域判斷硬幣個數(shù)?
Image=imread('coin.bmp');
subplot(131),imshow(Image),title('原圖像');
BW=im2bw(Image);
SE=strel('square',6);
subplot(132),imshow(BW),title('二值圖像');
result1=imopen(imclose(BW,SE),SE); %先閉后開
subplot(133);imshow(result1);title('先閉后開');
[L, NUM] = bwlabel(result1, 4) %檢測二值圖像中連通域的個數(shù)
%[L, NUM] = bwlabel(BW, N)
% BW 為輸入二值化圖像;
% N 可取值為4或8表示連接四連通或八連通區(qū)域;
% NUM 為找到的連通區(qū)域數(shù)目;
% L 為輸出圖像矩陣,其元素值為整數(shù),背景被標記為0,第一個連通區(qū)域被標記為1,第二個連通區(qū)域被標記為2,依此類推.所以你不明白的1,2,3即為第1,2,3個連通區(qū)域的標記
S=sprintf('檢測到的硬幣個數(shù)為:%d',NUM);msgbox(S);%彈窗顯示運行結(jié)果
?14、檢測特定的形狀
本例演示了如何檢測矩形:
clear,clc,close all;
image=rgb2gray(imread('shape.png'));
subplot(151),imshow(image),title('原圖');
BW=edge(image,'canny');
subplot(152),imshow(BW),title('邊界圖像');
% imwrite(BW,'shapeedge.jpg');
SE=strel('disk',5);
Morph=imclose(BW,SE);
subplot(153),imshow(Morph),title('形態(tài)學濾波');
% imwrite(Morph,'shapemorph.jpg');
Morph=imfill(Morph,'holes');
subplot(154),imshow(Morph),title('區(qū)域填充');
imwrite(Morph,'shapefill.jpg');
[B,L]=bwboundaries(Morph);
subplot(155),imshow(L),title('檢測圓和矩形');
% imwrite(L,'Lplane.jpg');
STATS = regionprops(L,'Area', 'Centroid','BoundingBox');
len=length(STATS);
hold on
for i=1:len
R=STATS(i).Area/(STATS(i).BoundingBox(3)*STATS(i).BoundingBox(4));
boundary=fliplr(B{i});
everylen=length(boundary);
F=4*pi*STATS(i).Area/(everylen^2);
dis=pdist2(STATS(i).Centroid,boundary,'euclidean');
miu=sum(dis)/everylen;
sigma=sum((dis-miu).^2)/everylen;
C=miu/sigma;
if R>0.9 && F<1
rectangle('Position',STATS(i).BoundingBox,'edgecolor','g','linewidth',2);
plot(STATS(i).Centroid(1),STATS(i).Centroid(2),'g*');
end
if R>pi/4-0.1 && R<pi/4+0.1 && F>0.9 && C>10
rectangle('Position',[STATS(i).Centroid(1)-miu,STATS(i).Centroid(2)-miu,2*miu,2*miu],...
'Curvature',[1,1],'edgecolor','r','linewidth',2);
plot(STATS(i).Centroid(1),STATS(i).Centroid(2),'r*');
end
end
hold off
15 、用Matlab設(shè)計實現(xiàn)圖形化界面。
調(diào)用后臺函數(shù)完成設(shè)計,函數(shù)可以調(diào)用Matlab工具箱中的函數(shù),也可以自己編寫函數(shù)。設(shè)計完成后,點擊GUI圖形界面上的菜單或者按鈕,在某些圖像處理操作中能夠接收參數(shù),進行必要的交互式操作后,最終能顯示運行結(jié)果??梢詤⒖祭尤缦拢?/p>
1)視頻參考:Matlab圖像處理GUI(附代碼)_嗶哩嗶哩_bilibili
附上源碼鏈接:https://pan.baidu.com/s/11dTBQUX2NMalT-yi1sm70Q 提取碼:dwqm
?
?2)這個忘記代碼鏈接了,會把代碼發(fā)群里。
?
16、優(yōu)秀作品展示
1)曾同學的作品,詳細參考她的博客,界面很清新,稍后會附上源碼鏈接:基于MATLAB APP Designer設(shè)計圖像處理小工具_栗幾memeji的博客-CSDN博客
?2)代同學的作品:
3)其他可以參考的作品:
數(shù)字圖像處理MATLAB大作業(yè):基礎(chǔ)版_黑瘦真的好看的博客-CSDN博客matlab大作業(yè)——基礎(chǔ)模板設(shè)計_阿喜。的博客-CSDN博客文章來源:http://www.zghlxwxcb.cn/news/detail-497254.html
數(shù)字圖像處理之matlab大作業(yè):基礎(chǔ)版圖像處理工具_...._L的博客-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-497254.html
到了這里,關(guān)于數(shù)字圖像處理之matlab大作業(yè):自制圖像處理小工具的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!