% 设置棋盘大小和格子数
boardSize = 15; % 棋盘大小,这里设置为15x15
gridSize = 40; % 每个格子的大小,用于图像显示
% 创建一个空白图像,大小为 (gridSize * (boardSize + 1)) x (gridSize * (boardSize + 1))
imageSize = gridSize * (boardSize + 1);
chessboardImage = ones(imageSize, imageSize);
% 绘制水平线
for i = 1:boardSize+1
chessboardImage(gridSize*i, :) = 0; % 0代表黑色,这里将水平线的像素值设为黑色
end
% 绘制垂直线
for j = 1:boardSize+1
chessboardImage(:, gridSize*j) = 0; % 0代表黑色,这里将垂直线的像素值设为黑色
end
% 显示生成的棋盘图像
% imshow(chessboardImage);
% title('生成的五子棋棋盘图像');
% 反转黑白颜色
invertedImage = imcomplement(chessboardImage);
% 显示反转后的图像
% imshow(invertedImage);
% title('黑白反转后的棋盘图像');
% 获取图像的大小
imageSize = size(invertedImage);
% 随机选择一个角落
corner = randi([1, 2], 1, 2); % 生成1x2的随机数,取值为1或2,分别表示左上、右上、左下、右下四个角落
% 定义腐蚀的区域范围
if corner(1) == 1
row_range = 1 : floor(imageSize(1) / 2);
else
row_range = ceil(imageSize(1) / 2) + 1 : imageSize(1);
end
if corner(2) == 1
col_range = 1 : floor(imageSize(2) / 2);
else
col_range = ceil(imageSize(2) / 2) + 1 : imageSize(2);
end
% 在指定区域进行腐蚀操作
se = strel('square', 3); % 定义腐蚀的结构元素,这里使用3x3的正方形
erodedImage = invertedImage;
erodedImage(row_range, col_range) = imerode(invertedImage(row_range, col_range), se);
% 显示腐蚀后的图像
% imshow(erodedImage);
% title('腐蚀一个角落后的图像');
% 获取图像的大小
imageSize = size(erodedImage);
% 定义网格交点像素坐标列表
intersectionPoints = [];
% 遍历图像的每个像素
for row = 2:imageSize(1)-1
for col = 2:imageSize(2)-1
% 检查当前像素是否为黑色(腐蚀后的交叉点)
if erodedImage(row, col) == 1
% 检查当前像素所在的行和列是否都包含黑色像素
rowPixels = erodedImage(row, :);
colPixels = erodedImage(:, col);
if sum(rowPixels == 1) > 100 && sum(colPixels == 1) > 100
% 添加网格交点像素坐标到列表
intersectionPoints = [intersectionPoints; [row, col]];
end
end
end
end
% 显示腐蚀后的图像
imshow(erodedImage);
title('腐蚀后的图像');
% 显示网格交点像素坐标
disp('腐蚀后图像的网格交点像素坐标:');
disp(intersectionPoints);
% 显示原图
imshow(erodedImage);
title('腐蚀后的图像');
% 将网格交点在原图中用标记表示出来
hold on;
plot(intersectionPoints(:, 2), intersectionPoints(:, 1), 'r+', 'MarkerSize', 10);
hold off;