實際上,在二值影象中提取連通分量是許多自**像分析應用中的核心任務。 令 y 表示乙個包含於集合 a 中的連通分量,並假設 y 中的乙個點 p 是已知的。而後,用下列的迭代表示式生成 y 的所有元素:
queue_head=1; %佇列頭
queue_tail=1; %佇列尾
neighbour=[-1 -1;-1 0;-1 1;0 -1;0 1;1 -1;1 0;1 1]; %和當前畫素座標相加得到八個鄰域座標
%neighbour=[-1 0;1 0;0 1;0 -1]; %四鄰域用的
q=[y x];
queue_tail=queue_tail+1;
[ser1 ser2]=size(neighbour);
while queue_head~=queue_tail
pix=q;
for i=1:ser1
pix1=pix+neighbour(i,:);
if pix1(1)>=1 && pix1(2)>=1 &&pix1(1)<=m && pix1(2)<=n
if img(pix1(1),pix1(2))==0
img(pix1(1),pix1(2))=1;
result(pix1(1),pix1(2))=1;
q=[pix1(1) pix1(2)];
queue_tail=queue_tail+1;
end
endend
queue_head=queue_head+1;
endfigure(1)
imshow(mat2gray(result));
title(
'提取之後的結果
結果:
clear all; %清理記憶體close all; %關閉視窗
clc %清屏
%影象分割
ii=imread('
shape.bmp
'); %讀取彩色影象並轉換為灰度影象
quyufenge(ii); %區域分割(8鄰域區域生長)
function quyufenge(ii)figure,subplot(1,2,1),imshow(ii),title('
二值化影象
'); %顯示輸入影象
%通過「滑鼠點選+回車」,選取種子點(x0,y0)
%規定:只允許在物件(白色區域)中選取乙個種子點
x0=1;
y0=1;
while ii(x0,y0) == 255[y0,x0]=getpts;
x0=uint32(x0);
y0=uint32(y0);
end[m,n]=size(ii);
%todo: 初始化大小為m×n、畫素值為0的輸出影象io
io=zeros(m,n);
io=quyushengzhang(x0,y0,io,ii); %對io執行區域迭代生長
subplot(1,2,2),imshow(io,),title('
分割後影象
'); %顯示分割後影象
function io=quyushengzhang(x0,y0,io,ii)[m,n]=size(ii);
for i=[-1,0,1]%todo: 對於每個種子點(x0,y0),遍歷它的每個8鄰域畫素(xn,yn)
for j=[-1 0 1]%todo
%todo: 計算xn, yn
xn=x0+i;
yn=y0+j;
if (xn>0&&xn<=m && yn>0 && yn<=n &&ii(x0,y0)==ii(xn,yn) && io(xn,yn)==0) %todo: 如果(xn,yn)位於影象空間內,並且同時滿足ii(x0,y0)=ii(xn,yn),io(xn,yn)=0
io(xn,yn)=255;%todo: 區域生長
io=quyushengzhang(xn,yn,io,ii); %將(xn,yn)作為新的種子點,重複此步驟
形態學處理
腐蝕,膨脹 效果就是暗的地方侵入亮的地方 使用 給乙個結構元 二維陣列 結構元中有乙個錨點,計算過程就是如果結構元對應的區域有暗的,那錨點就變為暗的 記作 import cv2 as cv import numpy as np s cv.getstructuringelement cv.morph ...
opencv 形態學處理
影象形態學中的幾個基本操作 腐蝕 膨脹 開操作 閉操作。1.1 腐蝕 結構a被結構b腐蝕的定義為,a b a b 可以理解為,移動結構b,如果結構b與結構a的交集完全屬於結構a的區域內,則儲存該位置點,所有滿足條件的點構成結構a被結構b腐蝕的結果。1.2 膨脹 結構a被結構b膨脹的定義為,a b a...
OpenCV 形態學處理
形態學主要處理二值影象 0黑1白 kernel np.ones 5 5 np.uint8 numpy庫生成1陣列,資料型別為整形 img2 cv2.erode img,kernel,iterations 迭代次數,預設為1 膨脹又叫逆腐蝕。先腐蝕後膨脹,可用於降噪。我們把先腐蝕後膨脹的操作合併為開運...