图像分割——孤立点检测(Matlab)
程序员文章站
2024-03-25 19:34:22
...
clc;
clear all;
close all;
%点检测测试图像(Detection of Isolated Points)
I=im2double(imread('D:\Gray Files\10-4.tif'));
[M,N]=size(I);
%%
%===========================孤立点检测=====================================
%输出图像
g=zeros(M,N);
%拉普拉斯内核(Laplacian kernel),各向同性
L=[1 1 1;1 -8 1;1 1 1];
n_l=floor(size(L,1)/2);
%对原图进行扩展,方便处理边界
I_pad=padarray(I,[n_l,n_l],'symmetric');
%卷积翻转
L=-L;
%门限
T=0.89903;
for i=1:M
for j=1:N
%获得图像子块区域
Block=I_pad(i:i+2*n_l,j:j+2*n_l);
%用拉氏内核对子区域卷积
if abs(sum(sum(Block.*L)))>T
g(i,j)=1;
end
end
end
%对孤立点做开操作,删除小点
g=Opening(g,3);
imshow(g)
开操作函数,Opening如下:
%开操作
% I 输入图像
% n 结构元素长度
function J_Opening=Opening(I,n)
B=ones(n,n);
n_B=length(find(B==1));
%这里需要B对其原点进行翻转,因为B是对称的,所以翻转后的结果与其本身相同
l_m=floor(n/2);
l_n=floor(n/2);
[M,N]=size(I);
%将原始图像进行扩展,这里采用了镜像扩展,以进行图像边缘计算
J_Erosion=zeros(M,N);
J_Opening=zeros(M,N);
I_pad=padarray(I,[l_m,l_n],'symmetric');
%腐蚀操作
for x=1:M
for y=1:N
%从扩展图像中取出子图像
Block=I_pad(x:x+2*l_m,y:y+2*l_n);
%将结构元素与子图像点乘,即逻辑“与”操作
c=B.*Block;
%比较结构元素与c中的1的数量,如果一样多,则该点的值为1
ind=find(c==1);
if length(ind)==n_B
J_Erosion(x,y)=1;
end
end
end
%膨胀操作
J_Erosion_pad=padarray(J_Erosion,[l_m,l_n],'symmetric');
for x=1:M
for y=1:N
%从扩展图像中取出子图像
Block=J_Erosion_pad(x:x+2*l_m,y:y+2*l_n);
%将结构元素与子图像点乘,即逻辑“与”操作
c=B.*Block;
%比较结构元素与c中的0的数量,如都为0,则该点的值为0,否则为1
ind=find(c==0);
if length(ind)~=n_B
J_Opening(x,y)=1;
end
end
end
end
推荐阅读
-
图像分割——孤立点检测(Matlab)
-
MATLAB图像处理实验——细胞图像的分割和计数
-
matlab图像点运算 对比度增强 对比度拉伸 灰度变换
-
Matlab实现图像阈值分割
-
【图像处理】——Python图像分割边缘检测算法之二阶梯度算子(laplace、log、dog算子)
-
【MATLAB图像融合】[12]canny边缘检测简易版
-
基于种子点的区域生长的灰度图像分割(pyhton语言实现)
-
python+opencv实现机器视觉基础技术(边缘提取,图像滤波,边缘检测算子,投影,车牌字符分割)
-
Matlab实现图像边缘检测
-
opencv_python Stitcher拼接图像实例(SIFT/SURF检测特征点,BF/FLANN匹配特征点)