以下內容是閱讀母校鍾教授的影像處理與電腦視覺 ,前幾章所寫的粗略程式。用Mathematica 可以快速入門做一次,有合適時機,再深入探討,用Mathematica 做影像處理第一章的 Hough Transform 的直線偵側的初階練習.


令iimage 等於你的圖檔 ,邊緣偵測用內建的Canny檢測.
使用ParallelTable指令做影像處理的平行運算, 每個點做houghTransform ,gatherSamePoint收集相同的值.

程式碼如下
iimage =(*your picture*);
m = iimage // ImageDimensions // Max;
reImage = ImageResize[iimage, m];
reImage // ImageDimensions
edageImage = EdgeDetect[reImage, 2, 0.2`, Method -> "Canny"];
edageImagePoint = ImageValuePositions[edageImage, 1];
n = Sqrt[edageImagePoint // Length] // Floor;
{m, n}
HighlightImage[reImage, edageImagePoint]
\[Theta]\[Rho]xy[\[Theta]_, point_List] :=
{\[Theta] //
N, (5 (point[[1]] Cos[\[Theta]] + point[[2]]*Sin[\[Theta]]) //
Floor), point}
houghTransform =
ParallelTable[\[Theta]\[Rho]xy[\[Theta], point], {\[Theta],
0, \[Pi], \[Pi]/(0.9 n)}, {point, edageImagePoint}];
gatherSamePoint = Table[GatherBy[i, #[[2]] &], {i, houghTransform}];
selectMorePoints =
Table[Select[gatherSamePoint[[i]], Length@# > 15 &], {i, 1,
Length@gatherSamePoint}] /. {} -> Nothing /. {x_?NumericQ, y_,
list_List} -> list;
selectLinePoint =
Map[SortBy[#, Total][[{1, 2}]] &, selectMorePoints, {2}];
lines = Map[InfiniteLine, selectLinePoint, {2}] // Flatten;
HighlightImage[reimage, lines]
自己摸一次之後,才知影像處理博大精深,要交給專業的來。下次去停車場看到柵欄舉不起來,要體諒寫程式的工程師。