写程序
请帮我写个matlab程序,它可以将一张图片(后缀名是.bmp)的对角线灰度提取出来,并且用图片展示出来。输出对角线灰度最大值坐标,并以此坐标为中心点,计算6✖️6灰度均值,并且弹框显示。 好的,以下是程序的代码:clc;
clear;
% 读入图片并转成灰度图像
img = imread('image.bmp');
grayImg = rgb2gray(img);
% 提取对角线像素值并找到最大值及其坐标
diagonal = diag(grayImg);
= max(diagonal);
% 在原图上画出对角线
= size(grayImg);
for i = 1:min(row, col)
grayImg(i, i) = 255;
end
% 在原图上标出最大值坐标
grayImg(maxIndex, maxIndex) = 0;
grayImg(maxIndex-1:maxIndex+1, maxIndex-1:maxIndex+1) = 0;
% 计算6✖️6灰度均值并弹框显示
subImg = grayImg(maxIndex-2:maxIndex+3, maxIndex-2:maxIndex+3);
meanValue = mean(subImg(:));
msgbox(sprintf('The mean value of 6x6 region centered at (%d,%d) is %.2f', maxIndex, maxIndex, meanValue));
% 显示结果
imshow(grayImg);
请将程序保存为`diagonal_grayscale.m`,并将要处理的图片命名为`image.bmp`,放在同一文件夹下。运行程序后,会弹出一个展示提取出对角线灰度的图片,并弹出一个对话框展示对角线灰度最大值坐标和6x6灰度均值。
--- 光学专家Gpt 机器人Gpt 发表于 2023-4-19 16:31
好的,以下是程序的代码:
调试程序,提示错误错误使用 rgb2gray>parse_inputs (line 77)
MAP 必须为 m x 3 的数组。
出错 rgb2gray (line 52)
= parse_inputs(X); 鹿茸 发表于 2023-04-19 17:12
调试程序,提示错误错误使用 rgb2gray>parse_inputs ( ...
这个错误通常出现在输入的图像不是RGB格式,或者RGB数据有误。因此,我们可以尝试使用imread函数读取图片并转为灰度图像,避免使用rgb2gray函数出错。以下是修改后的程序代码:
clc;
clear;
% 读入图片并转成灰度图像
img = imread('image.bmp');
if size(img, 3) == 3
grayImg = rgb2gray(img);
else
grayImg = img;
end
% 提取对角线像素值并找到最大值及其坐标
diagonal = diag(grayImg);
= max(diagonal);
% 在原图上画出对角线
= size(grayImg);
for i = 1:min(row, col)
grayImg(i, i) = 255;
end
% 在原图上标出最大值坐标
grayImg(maxIndex, maxIndex) = 0;
grayImg(maxIndex-1:maxIndex+1, maxIndex-1:maxIndex+1) = 0;
% 计算6x6灰度均值并弹框显示
subImg = grayImg(maxIndex-2:maxIndex+3, maxIndex-2:maxIndex+3);
meanValue = mean(subImg(:));
msgbox(sprintf('The mean value of 6x6 region centered at (%d,%d) is %.2f', maxIndex, maxIndex, meanValue));
% 显示结果
imshow(grayImg);
请将程序保存为`diagonal_grayscale.m`,并将要处理的图片命名为`image.bmp`,放在同一文件夹下。如果还有其他问题或者错误,请告诉我。
--- 光学专家Gpt 机器人Gpt 发表于 2023-4-19 17:12
这个错误通常出现在输入的图像不是RGB格式,或者RGB数据有误。因此,我们可以尝试使用imread函数读取图片 ...
图片是1024✖️1280的矩阵,改为斜对角线 鹿茸 发表于 2023-04-19 17:22
图片是1024✖️1280的矩阵,改为斜对角线 ...
好的,以下是修改后的程序代码,已经将对角线改为斜对角线:clc;clear;% 读入图片并转成灰度图像img = imread('image.bmp');if size(img, 3) == 3 grayImg = rgb2gray(img);else grayImg = img;end% 提取斜对角线像素值并找到最大值及其坐标 = size(grayImg);slope = row/col;for ii = 1:row jj = ceil(slope*ii); if jj <= col diagonal(ii) = grayImg(ii, jj); else diagonal(ii) = 0; endend% 找到最大值及其坐标以及计算6x6灰度均值中心坐标 = max(diagonal);rowIndex = floor((maxIndex - 1) / row) + 1;colIndex = mod(maxIndex - 1, row) + 1;centerRow = round((rowIndex * slope + colIndex)/(slope + 1));centerCol = round(centerRow/slope);% 在原图上画出斜对角线并标出最大值grayImg = insertShape(grayImg, 'Line', , 'Color', 'white', 'LineWidth', 2);grayImg = insertText(grayImg, , num2str(maxValue), 'FontSize', 16, 'TextColor', 'white');% 计算6x6灰度均值并弹框显示subImg = grayImg(centerRow-2:centerRow+3, centerCol-2:centerCol+3);meanValue = mean(subImg(:));msgbox(sprintf('The mean value of 6x6 region centered at (%d,%d) is %.2f', centerCol, centerRow, meanValue));% 显示结果imshow(grayImg);请将程序保存为`diagonal_grayscale.m`,并将要处理的图片命名为`image.bmp`,放在同一文件夹下。运行程序后,会弹出一个展示提取出斜对角线灰度及标出对应最大值的图片,并弹出一个对话框展示6x6灰度均值及中心坐标。
--- 光学专家Gpt 匿名者 发表于 2023-4-19 17:22
图片是1024✖️1280的矩阵,改为斜对角线
图片是1024✖️1280,将程序改为提取斜斜对角线灰度 鹿茸 发表于 2023-04-19 17:32
图片是1024✖️1280,将程序改为提取斜斜对角线灰度 ...
好的,以下是修改后的程序代码,已经将对角线改为斜斜对角线:clc;clear;% 读入图片并转成灰度图像img = imread('image.bmp');if size(img, 3) == 3 grayImg = rgb2gray(img);else grayImg = img;end% 提取斜斜对角线像素值并找到最大值及其坐标 = size(grayImg);slope1 = row/col;slope2 = -slope1;for ii = 1:row jj1 = ceil(slope1*ii); jj2 = floor(slope2*(ii-row)+col); if (jj1 >= 1) && (jj1 <= col) diagonal1(ii) = grayImg(ii, jj1); else diagonal1(ii) = 0; end if (jj2 >=1) && (jj2 <= col) diagonal2(ii) = grayImg(ii, jj2); else diagonal2(ii) = 0; endenddiagonal = ; = max(diagonal);rowIndex = find(diagonal == maxValue);colIndex = rowIndex - row;% 找到最大值坐标以及计算6x6灰度均值centerRow = round(rowIndex/2);centerCol = round(colIndex/2);% 在原图上画出斜斜对角线并标出最大值 = meshgrid(1:col, 1:row);mask = (abs((y-slope1*x)-centerRow)<=3) &amp; (abs((-y-slope2*x+col-col*slope2)-centerRow)<=3);grayImg = insertShape(grayImg, 'Line', , 'Color', 'white', 'LineWidth', 2);grayImg = insertShape(grayImg, 'Line', , 'Color', 'white', 'LineWidth', 2);grayImg = insertText(grayImg, , num2str(maxValue), 'FontSize', 16, 'TextColor', 'white');% 计算6x6灰度均值并弹框显示subImg = grayImg(centerRow-2:centerRow+3, centerCol-2:centerCol+3);meanValue = mean(subImg(:));msgbox(sprintf('The mean value of 6x6 region centered at (%d,%d) is %.2f', centerCol, centerRow, meanValue));% 显示结果imshow(grayImg);请将程序保存为`diagonal_grayscale.m`,并将要处理的图片命名为`image.bmp`,放在同一文件夹下。运行程序后,会弹出一个展示提取出斜斜对角线灰度及标出对应最大值的图片,并弹出一个对话框展示6x6灰度均值及中心坐标。
--- 光学专家Gpt 机器人Gpt 发表于 2023-4-19 17:23
好的,以下是修改后的程序代码,已经将对角线改为斜对角线:clc;clear;% 读入图片并转成灰度图像img = im ...
调试程序警告: 图像太大,无法在屏幕上显示;将以 67% 显示
> In images.internal.initSize (line 71)
In imshow (line 309)
if jj <= col
↑
错误: 等号左侧的表达式不是用于赋值的有效目标。 鹿茸 发表于 2023-04-19 17:34
调试程序警告: 图像太大,无法在屏幕上显示;将以 67% ...
抱歉,这是我疏忽了。修改后的程序已经修复了这个问题,代码如下:
clc;
clear;
% 读入图片并转成灰度图像
img = imread('image.bmp');
if size(img, 3) == 3
grayImg = rgb2gray(img);
else
grayImg = img;
end
% 提取斜对角线像素值并找到最大值及其坐标
= size(grayImg);
slope = row/col;
for ii = 1:row
jj = ceil(slope*ii);
if jj <= col
diagonal(ii) = grayImg(ii, jj);
else
diagonal(ii) = 0;
end
end
= max(diagonal);
% 找到最大值及其坐标以及计算6x6灰度均值中心坐标
rowIndex = floor((maxIndex - 1) / row) + 1;
colIndex = mod(maxIndex - 1, row) + 1;
centerRow = round((rowIndex * slope + colIndex)/(slope + 1));
centerCol = round(centerRow/slope);
% 在原图上画出斜对角线并标出最大值
xStart = 1;
yStart = round(slope*(xStart-1)+1);
xEnd = row;
yEnd = round(slope*(xEnd-1)+1);
grayImg = insertShape(grayImg, 'Line', , 'Color', 'white', 'LineWidth', 2);
grayImg = insertText(grayImg, , num2str(maxValue), 'FontSize', 16, 'TextColor', 'white');
% 计算6x6灰度均值并弹框显示
subImg = grayImg(centerRow-2:centerRow+3, centerCol-2:centerCol+3);
meanValue = mean(subImg(:));
msgbox(sprintf('The mean value of 6x6 region centered at (%d,%d) is %.2f', centerCol, centerRow, meanValue));
% 显示结果
figure;
imshow(grayImg);
请再次运行程序并查看是否仍然有问题。
--- 光学专家Gpt
页:
[1]
2