img = imread('111.png'); gray_img = rgb2gray(img); B=im2bw(gray_img,0.25); % bw_img = imbinarize(gray_img); bw = logical(B); cc = regionprops(bw, 'Centroid', 'MajorAxisLength', 'MinorAxisLength'); centers = cat(1, cc.Centroid); diameters = mean([cc.MajorAxisLength cc.MinorAxisLength], 2); radii = diameters / 2; imshow(gray_img); hold on; for i = 1:numel(radii) center = centers(i, :); radius = radii(i); viscircles(center, radius, 'EdgeColor', 'r'); end
时间: 2024-04-16 18:29:55 浏览: 25
这段代码看起来基本上是正确的。它加载了图像 `111.png`,将其转换为灰度图像,并使用阈值化将其转换为二值图像。然后,使用 `regionprops` 函数计算二值图像中每个连通区域的属性,包括圆心坐标和主轴长度等。最后,它在灰度图像上绘制了检测到的圆。
如果你仍然遇到问题,请提供更详细的错误信息,以便我可以更好地帮助你解决问题。
相关问题
img=imread('C:\Users\樱桃小丸子\Pictures\Saved Pictures\背景1.png'); if size(img)>2 I=rgb2gray(img); else I=img; end [m,n]=size(I);%图像的尺寸 counts=m*n;%像素总数 count=imhist(I);%求直方图 p=count/counts;%各个像素概率 w1=cumsum(p);%累计像素概率 u=cumsum(p.*(1:256)'); u_end=u(end);%u_end是全局平均灰度 d=(w1*u_end-u).^2./(w1.*(1-w1)); [x,y]=max(d);%返回最大方差和位置 t1=(y-1)/255;%自定义所得阈值 t2=graythresh(I);%graythresh计算出的阈值 subplot(2,2,1),imshow(I);title('灰度图像'); subplot(2,2,2),imhist(I);title('灰度直方图'); subplot(2,2,3),im2bw(I,t1);title('自定义函数图像'); subplot(2,2,4),im2bw(I,t2);title('graythresh图像');上述代码为什么不输出t1,t2,为什么输出ans
在Matlab中,如果没有指定变量名来存储某个表达式的结果,则默认使用变量名"ans"来存储。在上述代码中,虽然t1和t2分别被计算出来了,但是在函数结束之后并没有将它们赋值给任何变量名,因此Matlab默认将它们存储在"ans"变量中。因此,当你在Matlab命令窗口中运行这段代码时,会输出变量"ans"的值,而"ans"的值恰好就是t2的值(因为t2是在最后一行被计算出来的)。如果要输出t1和t2的值,可以在最后一行分别加上disp(t1)和disp(t2)。例如:
```
disp(t1);
disp(t2);
```
这样就可以将t1和t2的值输出到命令窗口中了。
matlab实现利用直方图确定阈值,对受噪声污染的指纹图片Fig0734.png进行分割,展示原图、直方图、分割后的图片(0、1二值图)
好的,以下是在MATLAB中实现该任务的示例代码:
```matlab
% 读取图片
img = imread('Fig0734.png');
img_gray = rgb2gray(img);
% 计算直方图
hist = imhist(img_gray);
% 寻找最佳阈值
total_pixels = numel(img_gray);
sum_B = 0;
sum_F = sum(hist);
w_B = 0;
w_F = total_pixels;
max_var = 0;
threshold = 0;
for i = 1:256
w_B = w_B + hist(i);
if w_B == 0
continue
end
w_F = total_pixels - w_B;
if w_F == 0
break
end
sum_B = sum_B + (i - 1) * hist(i);
mean_B = sum_B / w_B;
mean_F = (sum_F - sum_B) / w_F;
var_B = w_B * w_F * (mean_B - mean_F) ^ 2;
if var_B > max_var
max_var = var_B;
threshold = i - 1;
end
end
% 二值化
binary_img = im2bw(img_gray, double(threshold) / 255);
% 显示结果
figure
subplot(1, 3, 1)
imshow(img)
title('Original Image')
subplot(1, 3, 2)
imhist(img_gray)
title('Histogram')
subplot(1, 3, 3)
imshow(binary_img)
title('Binary Image')
```
运行上述代码后,会弹出一个包含三个子图的窗口,分别展示原图、直方图和二值化后的图片。你可以根据自己的需求进行调整和优化。