% 读入图像 img = imread('eight.tif'); % 全局阈值分割 threshold = graythresh(img); img_segmented = imbinarize(img, threshold); % 显示分割结果 subplot(2, 2, 1);imshow(img);title('Original Image'); subplot(2, 2, 2);imshow(img_segmented);title('Segmented Image'); % 利用膨胀算法完成硬币的整体分割 se = strel('disk', 20); img_dilated = imdilate(img_segmented, se); % 显示膨胀后的结果 subplot(2, 2, 3);imshow(img_dilated);title('Dilated Image'); % 利用腐蚀算法消除错分现象 se = strel('disk', 10); img_eroded = imerode(img_dilated, se); % 显示最终结果 subplot(2, 2, 4);imshow(img_eroded);title('Final Segmented Image');这段matlab代码图三和图四为什么是白色的?怎么解决
时间: 2024-02-18 16:04:50 浏览: 45
ibillxia-img.zip_matlab图像 处理 阈值_matlab读取img_yzfg程序是什么_灰度图像分割_画直方
在这段MATLAB代码中,图三和图四中的白色区域是由于使用了默认的imshow函数参数。imshow默认使用的是“显示范围自适应”的方式,即将像素值最小的点对应为黑色,像素值最大的点对应为白色。在这个例子中,分割后的图像只有两种像素值(0和1),因此imshow函数将1对应为白色。
要解决这个问题,可以通过将imshow函数中的显示范围手动设置为[0,1]之间的范围来显示正确的图像。
例如,可以将代码中的subplot(2, 2, 3)和subplot(2, 2, 4)的imshow函数修改为以下代码:
```
subplot(2, 2, 3);imshow(img_dilated, []);title('Dilated Image');
subplot(2, 2, 4);imshow(img_eroded, []);title('Final Segmented Image');
```
这样就可以正确地显示分割后的图像,黑色表示硬币区域,白色表示背景区域。
阅读全文