- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 3 相图像,我在其中使用自动阈值处理 (multithresh) 和“imquantize”函数进行了分割。在没有任何过滤操作的情况下,我的图像中确实有很多漏洞。但是,当我使用中值过滤器时,这些孔会减少,尽管尽管进行了过滤,但仍然有很多孔。
从这一点开始应用“imfill”函数会导致“过度填充”,如下图红圈部分所示。
代码如下:
%# Read in image
I = imread(‘original_image.jpg');
figure, imshow(I),axis off, title('Original Image');
%# Filter image
I = medfilt2(I);
% figure, imshow(I), title('Median-filtered image')
%# Segment image
thresh = multithresh(I, 2);
BW = imquantize(I, thresh);
figure, imshow(BW,[]),axis off, title('Segmented Image');
%# Fill holes
BW2 = imfill(BW,'holes');
figure, imshow(BW2, []); title('Filled holes image');
我只是想知道是否有更好的方法来处理这种情况。您认为使用“multithresh”和“imquantize”函数是否足以进行分割?分水岭能做得更好吗?这里有必要吗?
一般来说,请问我可以做些什么来提高输出图像的质量?
我问的原因是因为如果缩放原始图像的“imshow”,您会注意到大部分黑色相接触实体(白色相)。然而,自动分割并不能准确捕捉到这一点,因为分割后的图像在固相周围有中间(灰色)相环。我该如何处理?
非常感谢您预期的帮助/建议。
最佳答案
您的方法是否足够好在很大程度上取决于您想在这里实现的目标。例如,边界需要多平滑?
针对您的具体问题:您的量化图像具有三个级别,0(黑色)、1(灰色)和 2(白色)。你似乎想关闭灰色区域的小黑洞。为此,只需创建一个仅包含灰色像素的单独二进制图像,然后组合回您的多级图像(您不应该将其称为 BW,因为 Matlab 文档在任何地方都将其用于二进制图像,如果您应该保持一致可以)。
% pull out the gray "channel"
grayPixels = BW==1; % will have ones everywhere there's gray, and 0 otherwise
% to close holes up to a maximum size, invert the image (holes become islands)
% and eliminate small islands with bwareaopen
invGray = ~grayPixels;
invGray = bwareaopen(invGray,100); % closes holes up to 100pix size - adjust
grayPixels = ~invGray; % imshow to view result
% merge gray channel back in. Note we want black->gray,
% but we don't want white->gray.
% Since black/gray/white are 0/1/2, if we take the maximum of the gray
% (which is 0/1) and your "BW" (which is 0/1/2), we replace 0 in BW with 1
% wherever we have closed a hole
BW = max(BW,double(grayPixels);
imshow(BW,[]);
同样,您可以在“黑色” channel 上运行 bwareaopen
以去除各处的白点。
您可以类似地从 BW
中拉出“白色” channel ,作为大球形颗粒的分水岭,您很可能会得到很好的结果(如果白色颗粒是您想要的)之后)。
如果你想让白色粒子周围的细灰色边框消失,你可以试试形态学开运算。基本上,您将灰色区域缩小几个像素(腐 eclipse ),然后再将其重新增长几个像素(膨胀)。一条灰色细线将完全消失,因此不会有任何东西可以重新生长。
% take the gray "channel" again (after closing the small holes)
grayPixels = BW == 1;
grayPixelsOpened = imopen(grayPixels,strel('disk',3)); % play with the radius 3 to get the desired result
% everything that used to be gray and is no longer so needs to be turned black
% in the original image
BW(grayPixels~=grayPixelsOpened) = 0;
会有一些折衷,因为灰色阶段的弯月面将不再那么尖锐。如果需要,您可以通过后续打开黑色 channel 来稍微恢复。
关于matlab - 我可以做些什么来提高我的图像质量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41485537/
我正在尝试在特定图像上添加文本。它工作完美,但图像质量较低,尤其是 papyrus.ttf 字体。如何提高图像中文本的质量。但我需要高质量来打印输出。这是我的代码..它非常简单。 header("Co
是否可以获得现有图像的当前质量? 我想加载一个 JPEG 并在不改变质量和 DPI 的情况下再次保存它。 (我需要在保存前做一些像素操作) 最佳答案 JPEG 是一种有损格式。 这样做的直接方式,读取
我正在构建一个标签打印机。它由一个标志和一些文字组成,并不难。我已经花了 3 天时间尝试将原始 SVG Logo 绘制到屏幕上,但 SVG 太复杂,使用了太多渐变等。 所以我有一个高质量的位图 Log
我正在尝试以最快的方式以编程方式降低图像质量。现在,我能够从 byte[] 读取图像,然后作为 MemoryStream 将其读取到 Bitmap 并通过 Drawing。 Imaging.Encod
我允许用户上传图片。但是,我想保持 JPEG 质量不超过 90%。我打算做的是检测当前质量:- 如果少于 90% 什么都不做- 如果超过 90%,则使用 Image Magick 将图像重新压缩到 9
我正在制作一个 Android 应用程序,该应用程序通过使用内置摄像头作为 Intent 来使用摄像头。我正在逐个像素地对照片进行一些分析。我的 wildfire 在普通照片中返回 79000 像素,
我正在使用 python 程序生成一些数据,使用 matplotlib.pyplot 绘制数据,然后将图形显示在 latex 文件中。 我目前正在将图形保存为 .png 文件,但图像质量不是很好。我试
一直在尝试通过应用引擎将以下 png 文件上传到谷歌云存储: 在上传之前,我通过 PIL 运行它来处理任何图像旋转或背景颜色变化等 但是,即使在 python 命令行中运行相同的命令结果很好,但通过应
给定以下 Image 对象(它位于 ListView 对象的 DataTemplate 中): 我应该如何获得高质量的双三次插值图像? (在屏幕上,此图像的大小小于源 PNG,但默认调整大小似乎
如何在 PHP5 中压缩 GIF 图像文件? 我知道可以像这样处理 JPG imagejpeg($resource, $filename, $quality)根据 http://us.php.net/
我使用 html5 Canvas 元素在我的浏览器中调整图像大小。事实证明,质量非常低。我发现了这个:Disable Interpolation when Scaling a 但这无助于提高质量。 下
我正在使用 Visual Studio 2019 构建带有自定义任务 Pane 的 Excel 插件。 在用作自定义任务 Pane 的用户控件中,我添加了 imlNavigation (图片列表) 我
我是一名优秀的程序员,十分优秀!