學習的過程向來不是容易的,創(chuàng)造一個作品的過程更是不容易的。因此,在文章的最后,提供了兩個現(xiàn)成的示例代碼,大家直接可以拿來運行。在完成大作業(yè)的時候,大家可以在已有作品的基礎上,按照自己的需求進行修改,添加我們課程要求的功能,并體會如何完成一個完整的項目。
特別特別希望大家可以把下面的小功能整合成一個完整的項目~ 期待!
下面分功能演示實現(xiàn)細節(jié)(這些功能源自于發(fā)布的大作業(yè)要求):
1、導入圖片(或從攝像頭加載圖片 );1)選擇文件夾打開照片;
% '*.*'为显示当前文件夹中的所有文件;
% select a picture为文件对话框的标题;
% 'multiselect','on'为打开选择多个模式(默认为关);
% '.\'为要打开的文件路径
[file,path] = uigetfile('*.*','select a picture','multiselect','on','.\');
file_path=fullfile(path,file);
img=imread(file_path);
imshow(img);
title("原图像");
2)從攝像頭加載圖片;
加載攝像頭需要獲取硬件支持,所以在上需要安裝一個類似于驅動的軟件,安裝了好久網速不給力呀 ~ 具體細節(jié)可參考:
調用USB攝像頭實現(xiàn)過程_飛天長虹的博客-CSDN博客調用攝像頭
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ù)字圖像處理之實驗(一):基本操作_苗妮的博客-CSDN博客 形態(tài)學區(qū)域填充
5、圖像的灰度變換(包括指數(shù)變換、對數(shù)變換);6、直方圖均衡化
顯示處理后圖像和處理后圖像直方圖;處理前后對比效果顯示在一張圖中。
功能5-6數(shù)字圖像處理 愛課程,請參考本人博客
數(shù)字圖像處理之實驗(二):圖像增強_苗妮的博客-CSDN博客
7、圖像平滑(去除噪聲)
對圖像分別添加高斯噪聲和椒鹽噪聲,并分別用均值濾波器、中值濾波器、高斯濾波器處理,并將處理結果顯示在一張圖中;
8、圖像銳化(提取邊緣)
分別采用和二階算子提取圖像邊緣,并將處理結果顯示在一張圖中;
功能7-8,請參考本人博客
數(shù)字圖像處理之實驗(三):空間濾波器_苗妮的博客-CSDN博客
9、頻域處理
對圖像做平滑處理和提取邊緣,并將處理結果顯示在一張圖中;
10、圖像復原
對原圖做運動模糊數(shù)字圖像處理 愛課程,并進行圖像復原處理,將原圖、模糊圖、恢復后的模糊圖顯示在一張結果圖中;
功能9-10,參考本人博客:
11、形態(tài)學處理
(1)腐蝕、(2)膨脹、(3)開運算、(4)閉運算處理、(5)形態(tài)學濾波、(6)擊中與不擊中變換;
功能11,參考本人博客
數(shù)字圖像處理之實驗(五):形態(tài)學圖像處理_苗妮的博客-CSDN博客
12、圖像分割(提取圖中的紅蘋果)
(1)將已知圖像進行消噪處理
(2)對彩色圖像進行目標和背景分析
(3)通過顏色將圖像進行分割
(4)進行形態(tài)學處理,提取目標
在將蘋果分割的過程中,我們發(fā)現(xiàn)直方圖分割、閾值分割在這個場景下是失效的,此處給出的是算法,當然基于顏色的分割效果理論上也是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) %检测二值图像中连通域的个数
%[L, NUM] = bwlabel(BW, N)
% BW 为输入二值化图像;
% N 可取值为4或8表示连接四连通或八连通区域;
% NUM 为找到的连通区域数目;
% L 为输出图像矩阵,其元素值为整数,背景被标记为0,第一个连通区域被标记为1,第二个连通区域被标记为2,依此类推.所以你不明白的1,2,3即为第1,2,3个连通区域的标记
S=sprintf('检测到的硬币个数为:%d',NUM);msgbox(S);%弹窗显示运行结果
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('形态学滤波');
% imwrite(Morph,'shapemorph.jpg');
Morph=imfill(Morph,'holes');
subplot(154),imshow(Morph),title('区域填充');
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 && R0.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
1>
15 、用設計實現(xiàn)圖形化界面。
調用后臺函數(shù)完成設計,函數(shù)可以調用工具箱中的函數(shù),也可以自己編寫函數(shù)。設計完成后,點擊GUI圖形界面上的菜單或者按鈕,在某些圖像處理操作中能夠接收參數(shù),進行必要的交互式操作后,最終能顯示運行結果。可以參考例子如下:
1) 視頻參考:圖像處理GUI(附代碼)_嗶哩嗶哩
附上源碼鏈接: 提取碼:dwqm
?
2)這個忘記代碼鏈接了,會把代碼發(fā)群里。
?
:
: 苗妮
Title: 數(shù)字圖像處理之大作業(yè):自制圖像處理小工具