#这张图上的所有黑点想提取并用黑点上的一个像素点来代表这个黑点,每个黑点像素点的选择应有代表性,比如黑点A的像素点选择的是中心,那么黑点B就要用中心的像素点来表示,然后将每个黑点的位置提取出来,不能用腐蚀膨胀。
你参考一下这篇文章呢
https://blog.csdn.net/wmz_Gavin/article/details/128450638
不能用腐蚀膨胀的话,建议使用边缘检测算法,常用的算法:Sobel、Canny、Prewitt和特征提取方法,比如 Hu 矩、Tamura 特征 等。本人研究也不深,提供一个相关实例,【MATLAB图像处理-特征提取】供你参考:https://blog.csdn.net/qq_37400096/article/details/68943607
期望对你有所帮助,如有帮助,恭请采纳!
要提取图像中的黑点,并用每个黑点上的一个像素点来代表,可以使用以下步骤:
regionprops
函数提取前景区域的属性,包括中心坐标。下面是一个示例代码,演示如何实现这个过程:
% 读取图像
image = imread('your_image.jpg');
% 将图像转换为灰度图像
grayImage = rgb2gray(image);
% 对灰度图像进行二值化
threshold = graythresh(grayImage);
binaryImage = imbinarize(grayImage, threshold);
% 提取前景区域的属性
stats = regionprops(binaryImage, 'Centroid');
% 初始化黑点位置数组
blackPoints = zeros(length(stats), 2);
% 提取每个前景区域的中心坐标
for i = 1:length(stats)
blackPoints(i, :) = stats(i).Centroid;
end
% 显示黑点位置
disp(blackPoints);
请注意,这个方法假设黑点是连通的,并且没有重叠。如果黑点之间有重叠或者不连通,可能需要使用其他方法来处理。
edge:一个通用的边缘检测函数,可以使用不同的算子,如Sobel、Prewitt、Roberts、LOG和Canny1。
edge3:一个用于三维灰度或二值图像的边缘检测函数1。
【相关推荐】
// An highlighted block
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 函数测试代码: 图像处理
% 从图片相对简单、单一照片中获取其中物体最小外接圆,返回圆心、半径
% 1、调用自建函数:[PIC,center,radius] = m_minCircumferentialCircle(pic,background)
% 采用遍历查询确定最小外接圆半径。
% pic —— 原图(彩图/灰度图/二值图)
% background —— 原图背景色,0则为黑、1为白;
% 默认背景为白色,pic的二值图中物体为黑区
% minCnum —— 外接圆个数
% center —— 圆中心位置,数据格式为: [height1,width1]
% [height2,width2]
% radius —— 圆半径,数据格式为:[radius1]
% [radius2]
%
% 注:该函数没有边界检测,所画的圆可能超出原图大小。
% https://blog.csdn.net/BinHeon
% 2019/5/24
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
close all;
clear;
clc;
%%%% %%%% 读入图像,并显示
pic=imread('test2.jpg');
figure;
imshow(pic); title('原图(彩图以及灰度图二值图都可以)');
%%%% %%%% %%%% !!!调用函数计算最小外接圆圆心与半径,且默认图片背景为白;因为我测试图片背景为白色!
[minCnum,center,radius] = m_minCircumferentialCircle(pic);
%%%% %%%% %%%% 显示 pic,并在其上画出所有求得的最小外接圆
imshow(pic);
for i = 1:minCnum % 利用画线函数,画最小外接圆
%%%% 使用画线函数在pic图上 画圆
theta = 0:2*pi/3600:2*pi;
Circle1 = center(i,2) + radius(i)*cos(theta);
Circle2 = center(i,1) + radius(i)*sin(theta);% 构建圆
hold on;
plot(Circle1,Circle2,'m','Linewidth',1);% 画线
title('最小外接圆');
end
您可以使用MATLAB中的imfindcircles函数来提取这张图中的黑点。该函数可以返回每个黑点的圆心位置和半径。然后,您可以使用imcrop函数将每个黑点剪切出来,并使用imcenter函数返回黑点的中心像素点。最后,您可以将所有黑点的位置和中心像素点存储在一个矩阵中。以下是一个简单的示例代码:
% 读取图像
I = imread('your_image.png');
% 灰度化和二值化
I_gray = rgb2gray(I);
I_bw = imbinarize(I_gray);
% 提取圆形区域
[centers,radii] = imfindcircles(I_bw,[5 15]);
% 提取黑点位置和中心像素点
num_circles = length(centers);
points = zeros(num_circles, 2);
for i=1:num_circles
% 提取黑点位置
points(i,:) = centers(i,:);
% 剪切黑点区域
crop_radius = radii(i);
crop_center = centers(i,:);
crop_region = [crop_center(1)-crop_radius crop_center(2)-crop_radius crop_radius*2 crop_radius*2];
crop_I = imcrop(I_gray, crop_region);
% 提取中心像素点
center_point = imcenter(crop_I);
points(i,3:4) = center_point + crop_center - crop_radius - 1;
end
% 显示结果
imshow(I);
hold on;
plot(points(:,1),points(:,2),'ro');
在这个示例中,提取的黑点位置和中心像素点都存储在points矩阵中,其中points的第一列和第二列存储圆心位置,第三列和第四列存储中心像素点位置。
matlab二值化黑斑提取,[MATLAB图像处理] 对图像进行灰度转换,二值化,腐蚀和重采样等预处理的程序...
可以参考下
对图像进行一些必要的预处理,如灰度化、二值化等,以便于后续的黑色点识别。 利用连通组件分析(Connected-component labeling)算法识别并标记所有的黑点。该算法将找出所有连接的黑点,并为每个连接的黑点分配一个唯一的标签。
根据灰度值来提取
对图像进行灰度化和二值化处理,然后通过连通域分析提取出黑点,使用每个黑点的中心像素点来代表,并获取每个黑点的位置信息
imfindcircles函数可以提取