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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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
Image processing 在图像中查找圆形_Image Processing - Fatal编程技术网

Image processing 在图像中查找圆形

Image processing 在图像中查找圆形,image-processing,Image Processing,我有一个图像。我想检测我用红线标记的四个孔 我在下面的链接中有所有的图片。 输入图像(Input_Image.bmp) 预处理图像(PreprocessedImage.bmp) 工作图像(检测到的孔)(DetectedHoles.bmp) 非工作图像(仅检测到3个孔)(NonWorking.bmp) 最初,这是我对输入图像所做的预处理 输入图像:Input_Image.bmp hcontadj=vision.ContrastAdjuster; Extracted_Rim_ContrasT_Ad

我有一个图像。我想检测我用红线标记的四个孔

我在下面的链接中有所有的图片。

输入图像(Input_Image.bmp)

预处理图像(PreprocessedImage.bmp)

工作图像(检测到的孔)(DetectedHoles.bmp)

非工作图像(仅检测到3个孔)(NonWorking.bmp)

最初,这是我对输入图像所做的预处理 输入图像:Input_Image.bmp

hcontadj=vision.ContrastAdjuster;
Extracted_Rim_ContrasT_Adj=step(hcontadj,Extracted_Rim);
J = adapthisteq(Extracted_Rim);
Sharp_Img=imsharpen(J);
se=strel('disk',300);
imtop_op=imtophat(Sharp_Img,se);


 hgamma = ...
     vision.GammaCorrector(90.0,'Correction','De-gamma');
%  hgamma = ...
%      vision.GammaCorrector(12.0,'Correction','Gamma');
 y = step(hgamma, imtop_op);

h1 = imfilter(y,fspecial('gaussian',60,5));
H2=h1.*6.0;

se = strel('disk',14);
% Perform a morphological close operation on the image.
closeBW = imclose(H2,se);
figure, imshow(closeBW);
经过上述处理后获得的输出图像PreprocessedImage.bmp

imfindcircles()和viscircles()分别用于查找[centre,Raddi]和用蓝色标记圆

 [centers, radii] = imfindcircles(New_Open_Img,[32  100],'Sensitivity',0.81,'ObjectPolarity','dark');

    [h,x,y]=viscircles(centers, radii,'EdgeColor','b');
在上述两个函数imfindcircles()和viscircles()之后获得的输出图像是DetectedHoles.bmp

仅检测到三个孔的非工作图像 不工作。bmp。在这种情况下,所有四个圆都无法正确检测

我微调了
imfindcircles()
中的灵敏度和半径,但仍然无法检测到所有的圆

如果您能给我一些解决这个问题的想法,我将不胜感激


谢谢

我假设您使用的是Matlab,不幸的是我没有在这里安装Matlab,但我可以用python给您一个答案,它应该直接翻译成Matlab

我认为通过对圆(
imfindcircles
)使用Hough变换,您正在朝着一个好的方向前进。但关键是要正确设置半径范围。尤其是如果你希望你处理的图像是相似的。如果你上传的图像是有代表性的,那么你的半径应该在10到15之间(可能太大了,因为你想要检测的圆圈只有25像素宽)

另外,我不会使用形态学操作对图像进行预处理,而是使用边缘检测器。我用canny边缘检测器
BW1=edge(I,'canny')。如果你这样做,你也会检测到中间的圆圈,你可以在后处理步骤中移除它。您只需检查哪个圆既不是最远的上下圆,也不是最远的左或右圆

基于python/skimage的代码(与示例代码略有不同:):

笔记本(带结果)如下:

在Matlab中,它应该是

I = imread('test.jpeg');

BW1 = edge(I,'Canny');

[centers, radii, metric] = imfindcircles(BW1,[10 15]);

centersStrong5 = centers(1:5,:);
radiiStrong5 = radii(1:5);
metricStrong5 = metric(1:5);


imshow(I)
viscircles(centersStrong5, radiiStrong5,'EdgeColor','b');

你用什么语言?Matlab?是的,我正在使用Matlab。
I = imread('test.jpeg');

BW1 = edge(I,'Canny');

[centers, radii, metric] = imfindcircles(BW1,[10 15]);

centersStrong5 = centers(1:5,:);
radiiStrong5 = radii(1:5);
metricStrong5 = metric(1:5);


imshow(I)
viscircles(centersStrong5, radiiStrong5,'EdgeColor','b');