簡體   English   中英

使用MATLAB而不是圖像處理工具箱查找裁剪圓的中心

[英]finding center of cropped circle using MATLAB and no image processing toolbox

我有大量的圖像(〜2000張)顯示了裁切后的圓圈的灰度圖片。 每個圖像都是一個背景清晰的圓圈。 圖像是均勻的,背景也是均勻的。 圖像幾乎沒有噪音。 圖片大小約為700x700像素。

從某種意義上說,某些圖像被裁剪掉了,因為它們的一部分在圖像邊界之外。 圓圈大約是圖像的1/2大小。

在此處輸入圖片說明

我有Matlab,但沒有圖像處理工具箱。

我有關於圖像半徑的先驗信息。 我希望能從算法中收到它以進行驗證,但是我可以優先使用它。

如何獲得圓的中心和半徑?

謝謝!

這是霍夫變換的典型應用程序,但是由於您只有一個圓,因此我們可以做得更好。

下面的代碼計算圖像的漸變。 您的聲音很大,但您的圈子也很大。 我為梯度算子使用的高斯正則化使用了一個大西格瑪(我喜歡將卷積與高斯的導數一起使用以計算導數)。 接下來,我找到梯度幅度最大的像素,並為這些點建立方程組。 我們注意到,對於每個點i

原點 _x + 半徑 * 梯度 xi )= 坐標 xi

原點 _y + 半徑 * 梯度 yi )= 坐標 yi

(很抱歉,我們無法在SO上做適當的方程式)。 坐標是該點的坐標, 漸變是該點的歸一化漸變,並且_x_y表示向量的相應分量。 半徑可以為負,具體取決於漸變的方向。 我們可以使用MATLAB的\\運算符求解該線性方程組。

% Load image (take only first channel, they're all the same)
img = imread('https://i.stack.imgur.com/wAwdh.jpg');
img = dip_image(img(:,:,1));
% Compute gradient
grad = gradient(img,10);
% Find N pixels with largest gradient magnitude
N = 5000;
mask = norm(grad);
mask = setborder(mask,0,50); % Don't use data close to the edge of the image
tmp = sort(double(mask(:)));
mask = mask > tmp(end-N);
index = find(mask);
value = grad(index);
value = value / norm(value);
coords = ind2sub(mask,index); % value(i) at coords(i,:)
% Solve set of linear equations
p = [ones(N,1),zeros(N,1),double(value{1})';zeros(N,1),ones(N,1),double(value{2})'] \ coords(:);
origin = p(1:2)'
radius = p(3)
rmse = sqrt(mean((origin + radius * squeeze(double(value))' - coords).^2))
% Plot some of the lines
img
hold on
for ii=1:25:N
   plot(coords(ii,1)-[0,radius*double(value{1}(ii-1))],coords(ii,2)-[0,radius*double(value{2}(ii-1))],'r-')
end

輸出:

origin =
   -2.5667  177.5305

radius =
  322.5899

rmse =
   13.8160   13.0136

情節的結果

如您所見,噪聲在估計梯度時會造成很多麻煩。 但是,由於每個像素的估計中沒有偏差,因此最小二乘估計應可得出准確的值。

上面的代碼使用DIPimage 3 ,它是MATLAB的開源圖像分析工具箱(Apache許可)。 您必須自己編譯它,因為我們還沒有預編譯的發行包。 您可以下載具有相同功能的DIPimage 2.9 ,盡管我不確定在上面的代碼中使用了一些新語法。 DIPimage 2.9不是開源的,並且僅可在非商業應用程序中免費使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM