Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何提高图像质量?_Matlab_Image Processing_Image Enhancement - Fatal编程技术网

Matlab 如何提高图像质量?

Matlab 如何提高图像质量?,matlab,image-processing,image-enhancement,Matlab,Image Processing,Image Enhancement,我有一个3相图像,其中我使用自动阈值(multithresh)和“imquantize”功能进行了分割。我有很多洞在图像中没有任何过滤操作。然而,当我使用中值滤波器时,这些洞会减少,尽管经过滤波后仍然有很多洞。 从这一点应用“imfill”功能会导致“过度填充”,如下图红色圆圈部分所示。 代码如下: %# Read in image I = imread(‘original_image.jpg'); figure, imshow(I),axis off, title('Original I

我有一个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文档将其用于所有的二值图像,如果可以,您应该保持一致)

类似地,您可以在“黑色”频道上运行
bwareaopen
,删除此处和此处的白点

对于大型球形粒子上的分水岭,您可以类似地从
BW
中拉出“白色”通道,您很可能会得到一个非常好的结果(如果白色粒子是您所追求的)


如果要使白色粒子周围的灰色细边界消失,可以尝试形态学打开。基本上,将灰色区域缩小几个像素(腐蚀),然后再将其重新扩大几个像素(膨胀)。一条细细的灰线将完全消失,因此没有任何东西可以长出来

% 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;

由于灰色阶段的弯月面不再那么锐利,因此会有一些折衷。如果需要,您可以通过后续打开黑色通道进行恢复。

感谢您的回复和建议。即使调整像素大小,结果似乎也没有太大变化。然而,我刚刚从随后的分析中意识到,主要问题是分段的准确性(参见我问题最后一行之前的最后一段)。有什么建议吗?@User2201:我建议去掉灰色边框。另外,当你说填充孔后结果变化不大时,你是说你的最终分析结果没有变化,还是说填充孔没有变化?谢谢@Jonas。弯月面以及三相之间的接触点是我感兴趣的最重要的特征。磁盘大小为1似乎优于2或更多。但是,与原始曲面相比,生成的曲率的细节在大多数零件中都不太精细。还有什么可以考虑的建议吗?结构元素的类型如何?至于补洞,我的意思是这些洞没有补上。奇怪的是这些洞没有补上。但由于我无法访问图像,因此对此我无能为力。无论如何,因为它的边缘是最重要的,你可能想要直接跟踪它们,例如,你可以运行一个Canny边缘探测器(当然是经过过滤的图像——可能要考虑增加中值滤波窗口到5x5或7x7,或者使用各向异性扩散滤波),或者在梯度图像上滚动你自己的检测。嗨,乔纳斯!很抱歉我不得不离开这么长时间。我承受着巨大的压力,因此不得不专注于主代码本身。我想我可以通过稍微调整一下你的方法来解决这个问题。非常感谢。我现在想要的是找到一种平滑图像边缘的方法。我会为这个做一个新的帖子,并张贴我使用的代码。尽管如此,我还是会喜欢你的代码,因为它给了我尝试的动力。再次感谢!
% 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;